我是RapidJson的新手,我需要使用它构建一个应用程序。
现在我拥有的是从Yahoo API Weather获得的JSon字符串,它看起来像这样:
{
query: {
count: 1,
created: "2015-10-21T20:40:02Z",
lang: "fr-FR",
results: {
channel: {
item: {
condition: {
code: "27",
date: "Wed, 21 Oct 2015 9:59 pm CEST",
temp: "59",
text: "Mostly Cloudy"
}
}
}
}
}
}
我的数据包含数据:
void MyCurl::dataHandle(const std::string &data)
{
// std::cout << data << std::endl;
Document d;
d.Parse(data.c_str());
std::cout << d["temp"].GetString() << std::endl;
}
最后一行:
rapidjson/document.h :866 : rapidjson::GenericValue<Encoding, Allocator>&
rapidjson::GenericValue<Encoding, Allocator>::operator[](const
rapidjson::GenericValue<Encoding, SourceAllocator>&) [with SourceAllocator =
rapidjson::MemoryPoolAllocator<>; Encoding = rapidjson::UTF8<>; Allocator =
rapidjson::MemoryPoolAllocator<>]: assertion <false> failed.
如何访问温度和文字?
感谢您的帮助!
答案 0 :(得分:0)
JSon的格式有点特殊,我只需要挖掘所有数组。
所以现在我的行看起来像:
std::cout << d["query"]["results"]["channel"]["item"]["condition"]["text"].GetString() << std::endl;
答案 1 :(得分:-1)
上述字符串不是有效的json格式。你需要逃脱它。而不是{ temp : 23 }
它必须是string json ="{/"temp/" : 23}";
此外,您可以使用HasParseError()
和IsString()
在RapidJson中执行错误处理。