来自Yahoo Weather的RapidJson和数据

时间:2015-10-21 20:51:12

标签: c++ json qnetworkaccessmanager rapidjson

我是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.

如何访问温度和文字?

感谢您的帮助!

2 个答案:

答案 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中执行错误处理。