RapidJson 和来自 Yahoo Weather 的数据

Posted

技术标签:

【中文标题】RapidJson 和来自 Yahoo Weather 的数据【英文标题】:RapidJson and Data from Yahoo Weather 【发布时间】:2015-10-21 20:51:11 【问题描述】:

我是 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&lt;Encoding, Allocator&gt;&amp;rapidjson::GenericValue&lt;Encoding, Allocator&gt;::operator[](constrapidjson::GenericValue&lt;Encoding, SourceAllocator&gt;&amp;) [with SourceAllocator =rapidjson::MemoryPoolAllocator&lt;&gt;; Encoding = rapidjson::UTF8&lt;&gt;; Allocator =rapidjson::MemoryPoolAllocator&lt;&gt;]: assertion &lt;false&gt; failed.

如何访问温度和文本?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

JSon 的格式有点特殊,我只需要把数组全部挖掉。

所以现在我的行​​看起来像:

std::cout << d["query"]["results"]["channel"]["item"]["condition"]["text"].GetString() << std::endl; 

【讨论】:

【参考方案2】:

以上字符串不是有效的 json 格式。你需要逃避它。而不是 temp : 23 ,它必须是string json ="/"temp/" : 23";

此外,您可以在 RapidJson 中使用 HasParseError()IsString() 执行错误处理。

【讨论】:

以上是关于RapidJson 和来自 Yahoo Weather 的数据的主要内容,如果未能解决你的问题,请参考以下文章

C/C++C++Json解析和生成的开源库:RapidJson和JsonCpp

使用 rapidjson 和 ATL CString

如何利用rapidjson修改json文件

rapidjson的学习及使用

char多少字节influxdb

来自电子邮件的电话链接不起作用 yahoo webmail