mirror of
https://github.com/yhirose/cpp-httplib.git
synced 2026-10-13 14:53:18 +00:00
Reword the Japanese sentences so they read naturally, and correct the size of the llama.cpp server sources in the code reading chapter.
37 lines
1.6 KiB
Markdown
37 lines
1.6 KiB
Markdown
---
|
|
title: "C02. JSONを送受信する"
|
|
order: 2
|
|
status: "draft"
|
|
---
|
|
|
|
cpp-httplibにはJSONパーサーが含まれていません。JSONの組み立てや解析には[nlohmann/json](https://github.com/nlohmann/json)などのライブラリを使ってください。ここでは`nlohmann/json`を例に説明します。
|
|
|
|
## JSONを送信する
|
|
|
|
```cpp
|
|
httplib::Client cli("http://localhost:8080");
|
|
|
|
nlohmann::json j = {{"name", "Alice"}, {"age", 30}};
|
|
auto res = cli.Post("/api/users", j.dump(), "application/json");
|
|
```
|
|
|
|
`Post()`の第2引数にJSON文字列、第3引数にContent-Typeを渡します。`Put()`や`Patch()`でも同じ形です。
|
|
|
|
> **Warning:** 第3引数のContent-Typeが`"application/json"`でないと、サーバー側でJSONとして扱われないことがあります。忘れずに指定しましょう。
|
|
|
|
## JSONレスポンスを受け取る
|
|
|
|
```cpp
|
|
auto res = cli.Get("/api/users/1");
|
|
if (res && res->status == 200) {
|
|
auto j = nlohmann::json::parse(res->body);
|
|
std::cout << j["name"] << std::endl;
|
|
}
|
|
```
|
|
|
|
`res->body`は`std::string`なので、そのままJSONライブラリに渡せます。
|
|
|
|
> **Note:** サーバーがエラー時にHTMLを返すことがあります。ステータスコードを確認してからパースすると安全です。また、APIによっては`Accept: application/json`ヘッダーが必要です。JSON APIを繰り返し呼ぶなら[C03. デフォルトヘッダーを設定する](../c03-default-headers)が便利です。
|
|
|
|
> サーバー側でJSONを受け取って返す方法は[S02. JSONリクエストを受け取りJSONレスポンスを返す](../s02-json-api)を参照してください。
|