c++将json数据读入自定义数据结构
时间: 2023-08-16 16:07:15 浏览: 268
根据json内容生成C++结构体定义
要将 JSON 数据读入自定义数据结构,你可以使用第三方的 JSON 库,例如 RapidJSON 或者 JSON for Modern C++。这里以 RapidJSON 为例,假设你有以下 JSON 数据:
```json
{
"name": "John",
"age": 30,
"address": {
"street": "123 Main St",
"city": "Anytown",
"state": "CA"
},
"phoneNumbers": [
{
"type": "work",
"number": "555-1234"
},
{
"type": "home",
"number": "555-5678"
}
]
}
```
你可以定义一个对应的自定义数据结构来存储这些数据:
```c++
#include <string>
#include <vector>
struct Address {
std::string street;
std::string city;
std::string state;
};
struct PhoneNumber {
std::string type;
std::string number;
};
struct Person {
std::string name;
int age;
Address address;
std::vector<PhoneNumber> phoneNumbers;
};
```
然后使用 RapidJSON 的解析器来解析 JSON 数据,并将数据存储到自定义数据结构中:
```c++
#include "rapidjson/document.h"
#include "rapidjson/filereadstream.h"
#include <cstdio>
int main() {
// 从文件中读取 JSON 数据
FILE* fp = fopen("data.json", "r");
char readBuffer[65536];
rapidjson::FileReadStream is(fp, readBuffer, sizeof(readBuffer));
// 解析 JSON 数据
rapidjson::Document document;
document.ParseStream(is);
// 将数据存储到自定义数据结构中
Person person;
person.name = document["name"].GetString();
person.age = document["age"].GetInt();
person.address.street = document["address"]["street"].GetString();
person.address.city = document["address"]["city"].GetString();
person.address.state = document["address"]["state"].GetString();
const rapidjson::Value& phoneNumbers = document["phoneNumbers"];
for (rapidjson::SizeType i = 0; i < phoneNumbers.Size(); i++) {
PhoneNumber phoneNumber;
phoneNumber.type = phoneNumbers[i]["type"].GetString();
phoneNumber.number = phoneNumbers[i]["number"].GetString();
person.phoneNumbers.push_back(phoneNumber);
}
// 打印自定义数据结构中的数据
printf("Name: %s\n", person.name.c_str());
printf("Age: %d\n", person.age);
printf("Address: %s, %s, %s\n", person.address.street.c_str(), person.address.city.c_str(), person.address.state.c_str());
printf("Phone numbers:\n");
for (const auto& phoneNumber : person.phoneNumbers) {
printf(" %s: %s\n", phoneNumber.type.c_str(), phoneNumber.number.c_str());
}
fclose(fp);
return 0;
}
```
这样就可以将 JSON 数据读入自定义数据结构中了。
阅读全文