cpp中解析char*中的json字符串
时间: 2023-10-20 07:05:28 浏览: 101
C++ 中解析 JSON 字符串,可以使用第三方的 JSON 库,例如:RapidJSON、nlohmann/json、JsonCpp 等等。
以 RapidJSON 为例,示例代码如下:
```c++
#include <iostream>
#include "rapidjson/document.h"
int main() {
const char* json = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";
rapidjson::Document doc;
doc.Parse(json);
std::string name = doc["name"].GetString();
int age = doc["age"].GetInt();
std::string city = doc["city"].GetString();
std::cout << "Name: " << name << std::endl;
std::cout << "Age: " << age << std::endl;
std::cout << "City: " << city << std::endl;
return 0;
}
```
以上代码中,首先定义 JSON 字符串 `json`,然后使用 `rapidjson::Document` 对象解析 JSON 字符串,通过 `GetString()` 和 `GetInt()` 等函数获取 JSON 中的值。需要注意的是,以上示例只能解析简单的 JSON 数据,对于复杂的 JSON 结构,需要使用更多的 RapidJSON API。
另外,如果 JSON 字符串存储在 char* 中,也可以使用 `rapidjson::MemoryStream` 对象进行解析,示例代码如下:
```c++
#include <iostream>
#include "rapidjson/document.h"
#include "rapidjson/reader.h"
struct MyHandler {
bool String(const char* str, rapidjson::SizeType length, bool copy) {
std::string value(str, length);
std::cout << "String: " << value << std::endl;
return true;
}
bool Int(int i) {
std::cout << "Int: " << i << std::endl;
return true;
}
bool Bool(bool b) {
std::cout << "Bool: " << b << std::endl;
return true;
}
};
int main() {
const char* json = "{\"name\":\"John\",\"age\":30,\"isMale\":true}";
rapidjson::MemoryStream ms(json, strlen(json));
rapidjson::Reader reader;
MyHandler handler;
reader.Parse(ms, handler);
return 0;
}
```
以上代码中,定义了一个自定义的 `MyHandler` 类,实现了 RapidJSON 的 `BaseReaderHandler` 接口,通过重写接口中的函数,实现对 JSON 数据的解析。然后使用 `rapidjson::MemoryStream` 对象将 char* 转化为流对象,使用 `rapidjson::Reader` 对象解析 JSON 数据,并通过 `MyHandler` 类处理解析后的数据。
阅读全文