0
我有以下代码。如何使用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。它让我回到数组元素的嵌套字符串。
rapidjson::StringBuffer sb;
rapidjson::Writer<rapidjson::StringBuffer> writer1(sb);
d[0].Accept(writer1);
std::cout << sb.GetString() << std::endl;
上述替代的输出是:
{"k1":"1"}
我可以反馈上面的字符串输出再次解析。有没有办法直接解析这个?
PS:有没有更好的杰森解析器的C++与简单的界面?
“1” - 未INT - 它是一个字符串 - 所以你需要使用'd [i] [“k1”]。GetString()'。 Int将在不带引号的json中表示。从json中提取字符串“1”后,你可以使用stoi将它转换为int。 –