c++ 解析json 中的数组,不用外部库
时间: 2024-12-08 15:19:53 浏览: 8
在C++中解析JSON,尤其是数组部分,而不需要依赖于外部库,可以手动处理JSON数据,但这需要对JSON格式有深入的理解,并且会涉及到字符串操作、内存管理和类型转换等复杂工作。一种常见的方法是使用`std::stringstream`配合一些基础的文本处理函数。这里提供一个简化版的示例,用于解析基本的JSON数组:
```cpp
#include <iostream>
#include <sstream>
#include <string>
// JSON键值对结构体
struct JsonPair {
std::string key;
std::string value;
};
// 助手函数将JSON字符串分割成键值对
JsonPair parse_pair(const std::string& json) {
std::size_t pos = json.find(":");
if (pos == std::string::npos) {
throw std::runtime_error("Invalid JSON pair found");
}
return {json.substr(0, pos), json.substr(pos + 1, json.length() - pos - 1)};
}
// 解析JSON数组
std::vector<JsonPair> parse_array(const std::string& json_array) {
std::istringstream iss(json_array);
std::vector<JsonPair> result;
std::string item;
while (getline(iss, item, ', ')) { // 使用逗号和空格分隔数组元素
result.push_back(parse_pair(item));
}
return result;
}
int main() {
try {
const std::string json_str = "[{'name': 'Alice', 'age': '25'}, {'name': 'Bob', 'age': '30'}]";
std::vector<JsonPair> pairs = parse_array(json_str);
for (const auto& pair : pairs) {
std::cout << "Key: " << pair.key << ", Value: " << pair.value << std::endl;
}
} catch (const std::exception& e) {
std::cerr << "Error parsing JSON: " << e.what() << std::endl;
}
return 0;
}
```
这个例子非常基础,仅适用于简单的一维JSON数组。对于复杂的JSON结构,如嵌套数组或对象,手动解析会变得相当困难,这时通常推荐使用像RapidJSON这样的第三方库。
阅读全文