jsoncpp 数组
时间: 2024-12-31 13:42:30 浏览: 12
### 使用 JsonCpp 处理 JSON 数组
#### 创建 JSON 数组并添加元素
为了展示如何使用 `JsonCpp` 库来处理 JSON 数组,下面是一个简单的 C++ 程序示例。此程序展示了如何创建一个包含多个对象的 JSON 数组,并向其中添加键值对。
```cpp
#include <json/json.h>
#include <iostream>
int main() {
// 初始化根节点
Json::Value root;
// 定义数组容器
Json::Value users(Json::arrayValue);
// 添加第一个用户的个人信息到数组中
Json::Value user1;
user1["name"] = "Jeremy";
user1["age"] = 30;
user1["city"] = "New York";
users.append(user1);
// 添加第二个用户的个人信息到数组中
Json::Value user2;
user2["name"] = "Eva";
user2["age"] = 28;
user2["city"] = "Los Angeles";
users.append(user2);
// 将用户列表附加到根节点下名为 'users' 的字段里
root["users"] = users;
// 输出美化后的 JSON 字符串表示形式
std::cout << root.toStyledString();
}
```
这段代码首先定义了一个代表整个文档结构的顶级 `root` 对象,接着声明了一个用于存储用户记录的 `users` 数组变量[^2]。通过调用 `append()` 方法可将新创建的对象追加至该数组内;最后再把完整的数组赋给 `root` 下的一个特定名称属性(这里是 `"users"`),以便形成最终的 JSON 结构体[^3]。
#### 解析已有的 JSON 数据中的数组
当需要读取现有的 JSON 文件或字符串内的数组时,则可以通过遍历的方式来访问各个成员项:
```cpp
// 假设已经有一个包含了上述 JSON 内容的 string 变量 jsonString
std::string jsonString = R"({"users":[{"name":"Jeremy","age":30,"city":"New York"},{"name":"Eva","age":28,"city":"Los Angeles"}]})";
// 构建 reader 并尝试解析输入流
Json::CharReaderBuilder builder;
JSONCPP_STRING errs;
std::istringstream ss(jsonString);
Json::Value parsedData;
if (parseFromStream(builder, ss, &parsedData, &errs)) {
const Json::Value& usersArray = parsedData["users"];
for(unsigned int i=0 ;i<usersArray.size(); ++i){
std::cout << "User Name: " << usersArray[i]["name"].asString()<< "\n";
std::cout << "Age: "<< usersArray[i]["age"].asInt()<< "\n";
std::cout << "City: " << usersArray[i]["city"].asString()<< "\n\n";
}
} else {
std::cerr << "Failed to parse JSON:" << errs << "\n";
}
```
这里先构建了一个 `Json::CharReaderBuilder` 实例用来配置解析器设置,之后借助辅助函数 `parseFromStream()` 来执行实际的数据转换操作。一旦成功获取到了目标数组引用 (`usersArray`) 后就可以像普通 STL 集合那样迭代其内部条目了[^1]。
阅读全文