使用 jsoncpp 解析 json 数组字符串
Parse json array string using jsoncpp
我有这个 JSON:
[{"header": "test" , "test2" : "test2"}]
我正在尝试使用 jsoncpp 解析它。
这是我的代码片段:
Json::CharReaderBuilder builder;
Json::CharReader *reader = builder.newCharReader();
Json::Value root;
bool parseRet = reader->parse(serverResponse.c_str(),serverResponse.c_str() +serverResponse.size(), &root, &errors);
parseRet
返回true
.但root
不包括 json 数据。
我该如何解析?
parseRet
返回true
。但root
不包括 JSON 数据。
这听起来像是您访问解析的 JSON 元素的方式存在问题。
下面是一个完整的工作示例,其中原始字符串文本作为 JSON 输入。
几点:
- 使用 std::unique_ptr 表示
reader
在最后适当地取消分配内存。在您的代码片段中,这是内存泄漏。 - 仔细阅读文档!使用方法或运算符访问元素可能会返回默认值或异常,因此请相应地处理。例如,
root
中的JSON是一个数组,因此应该通过索引访问它,然后每个索引都包含一个对象,即root[0]["header"]
.
示例 (C++11(:
#include <iostream>
#include <string>
#include <memory>
#include <jsoncpp/json/json.h>
int main()
{
const std::string raw_json = R"json([{"header": "test" , "test2" : "test2"}])json";
Json::CharReaderBuilder builder {};
// Don't leak memory! Use std::unique_ptr!
auto reader = std::unique_ptr<Json::CharReader>( builder.newCharReader() );
Json::Value root {};
std::string errors {};
const auto is_parsed = reader->parse( raw_json.c_str(),
raw_json.c_str() + raw_json.length(),
&root,
&errors );
if ( !is_parsed )
{
std::cerr << "ERROR: Could not parse! " << errors << 'n';
return -1;
}
std::cout << "Parsed JSON:n" << root << "nn";
try
{
std::cout << "header: " << root[0]["header"] << 'n';
std::cout << "test2 : " << root[0]["test2"] << 'n';
}
catch ( const Json::Exception& e )
{
std::cerr << e.what() << 'n';
}
return 0;
}
输出:
Parsed JSON:
[
{
"header" : "test",
"test2" : "test2"
}
]
header: "test"
test2 : "test2"
相关文章:
- 使用 jsoncpp 解析 json 数组字符串
- C++ 对象数组字符串输入在控制台上不起作用
- 插入了 C++ 数组字符串数据,但在显示输出时不显示
- 无法区分 JSON 对象/数组/字符串
- 为什么数组(字符串类型)的大小是 24 字节,带有单个空格元素
- 如何使用数组字符串进行输入验证
- (C++) 打印字符数组字符串的单词时出现问题
- 使用Back_inserter从任何位置的输入字符中使用Back_inserter进行过滤数组字符串
- C 函数反转字符数组字符串
- 如何在 c++ 中创建数组(字符串 [] )的向量
- 如何返回数组字符串的指针
- char数组字符串混淆
- 如何从字符数组字符串中提取空格
- 是否可以将 Bitset<8> 的值复制到数组字符串而不转换它们?
- C++数组字符串函数
- 如何在函数中操作字符数组(字符串)的指针,该指针在C / C ++中作为参数传递
- visual将音频文件存储到数组/字符串流C++中
- c++在char数组(字符串)上将what替换为
- 将数组字符串转换为intger c++(初学者)
- 需要设置数组字符串长度,使其恰好为13