如何使用 rapidjason 解析根目录中的数组
How to parse array in root with rapidjason
我有以下代码。
Document d;
const char* json = "[{\"k1\":\"1\"}, {\"k1\":\"2\"}]";
d.Parse(json);
for (SizeType i = 0; i < d.Size(); i++) {
cout << d[i]["k1"].GetInt() << "\n";
}
当我 运行 时出现以下错误:
rapidjson/include/rapidjson/document.h:1700: int rapidjson::GenericValue<Encoding, Allocator>::GetInt() const [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]: Assertion `data_.f.flags & kIntFlag' failed.
我想到的一种方法是使用接受 stringBuffer 的 writer。它返回数组元素的嵌套字符串。
rapidjson::StringBuffer sb;
rapidjson::Writer<rapidjson::StringBuffer> writer1( sb );
d[0].Accept( writer1 );
std::cout << sb.GetString() << std::endl;
上述替代方案的输出是:
{"k1":"1"}
我可以反馈上面的字符串输出重新解析。有没有办法直接解析这个?
PS: 有没有更好的 C++ 的 jason 解析器,界面简单?
作为程序员,您应该知道您正在序列化或反序列化的 JSON 字符串的格式。在这种情况下,您似乎将字符串值视为整数。
现在,要解决此问题,您可以将它们视为字符串,然后使用标准 C++ 实用程序将这些字符串值转换为整数,或者您可以更新 JSON 字符串以包含整数。
第一种方法(虽然转换为 int 的方式不是最好的):
Document d;
const char* json = "[{\"k1\":1}, {\"k1\":2}]";
d.Parse(json);
for (SizeType i = 0; i < d.Size(); i++) {
int d;
sscanf(d[i]["k1"].GetString(), "%d", &d);
cout << d << "\n";
}
第二种方法:
Document d;
const char* json = "[{\"k1\":1}, {\"k1\":2}]";
d.Parse(json);
for (SizeType i = 0; i < d.Size(); i++) {
cout << d[i]["k1"].GetInt() << "\n";
}
我有以下代码。
Document d;
const char* json = "[{\"k1\":\"1\"}, {\"k1\":\"2\"}]";
d.Parse(json);
for (SizeType i = 0; i < d.Size(); i++) {
cout << d[i]["k1"].GetInt() << "\n";
}
当我 运行 时出现以下错误:
rapidjson/include/rapidjson/document.h:1700: int rapidjson::GenericValue<Encoding, Allocator>::GetInt() const [with Encoding = rapidjson::UTF8<>; Allocator = rapidjson::MemoryPoolAllocator<>]: Assertion `data_.f.flags & kIntFlag' failed.
我想到的一种方法是使用接受 stringBuffer 的 writer。它返回数组元素的嵌套字符串。
rapidjson::StringBuffer sb;
rapidjson::Writer<rapidjson::StringBuffer> writer1( sb );
d[0].Accept( writer1 );
std::cout << sb.GetString() << std::endl;
上述替代方案的输出是:
{"k1":"1"}
我可以反馈上面的字符串输出重新解析。有没有办法直接解析这个?
PS: 有没有更好的 C++ 的 jason 解析器,界面简单?
作为程序员,您应该知道您正在序列化或反序列化的 JSON 字符串的格式。在这种情况下,您似乎将字符串值视为整数。
现在,要解决此问题,您可以将它们视为字符串,然后使用标准 C++ 实用程序将这些字符串值转换为整数,或者您可以更新 JSON 字符串以包含整数。
第一种方法(虽然转换为 int 的方式不是最好的):
Document d;
const char* json = "[{\"k1\":1}, {\"k1\":2}]";
d.Parse(json);
for (SizeType i = 0; i < d.Size(); i++) {
int d;
sscanf(d[i]["k1"].GetString(), "%d", &d);
cout << d << "\n";
}
第二种方法:
Document d;
const char* json = "[{\"k1\":1}, {\"k1\":2}]";
d.Parse(json);
for (SizeType i = 0; i < d.Size(); i++) {
cout << d[i]["k1"].GetInt() << "\n";
}