JSON (JavaScript Object Notation) 是輕量級數據交換格式。C++ 無內建支持,推薦使用 jsoncpp 庫(官方首推)。
Json::Value root;
root["key_string"] = "value_string";
root["key_number"] = 12345;
root["key_boolean"] = false;
root["key_double"] = 12.345;
root["key_object"]["age"] = 26;
root["key_object"]["name"] = "huchao";
root["key_array"].append("array_string");
root["key_array"].append(1234); // 數組元素可異構
// 緊湊格式
Json::FastWriter fw;
cout << fw.write(root) << endl;
// 輸出:{"key_array":["array_string",1234],"key_boolean":false,...}
// 格式化輸出
Json::StyledWriter sw;
cout << sw.write(root) << endl;
// 輸出:縮進換行的可讀格式
Json::Reader reader;
Json::Value obj;
const char* json = "{\"age\":26,\"name\":\"huchao\"}";
if (reader.parse(json, obj)) {
cout << obj["name"].asString() << endl; // huchao
cout << obj["age"].asInt() << endl; // 26
}
jsoncpp 僅支持 ANSI 字符串。若項目用 Unicode (wchar_t),需編寫適配層轉換編碼。
| 操作 | 代碼 |
|---|---|
| 判斷類型 | val.type() == Json::objectValue |
| 檢查鍵存在 | val.isMember("key") |
| 獲取數組大小 | val.size() |
| 遍歷對象 | for (auto it = val.begin(); it != val.end(); ++it) |
| 清空 | val.clear() |