C ++:程序返回不同的JSON结果,而不是手动访问url

时间:2014-10-16 03:14:28

标签: c++ json getjson

我正在处理一个操纵roomba的项目。我使用的RooWifi微控制器经常将传感器数据写入json文件,我试图获取json,解析它,并将我的操作基于输出。

我在从URL抓取j​​son的数据时遇到问题。该文件位于一个地址,比如说

http://10.0.0.1/roomba.json

我可以手动将地址输入Chrome并查看数据。但是,当我以编程方式获取json文件时,数据值为零。

json的格式以及我在Chrome中的显示方式是:

{
 "response": { 
       "r13": {
                "name": "Angle",
                "value": "0"
              },
       "r14": {
                "name": "Charging State",
                "value": "4" 
              },
       "r18": {
                "name": "Charge",
                "value": "863"
              },
       "r19": {
                "name": "Capacity",
                "value": "1618"
              }
            }
}

以编程方式返回的是:

{
 "response": { 
       "r13": {
                "name": "Angle",
                "value": "0"
              },
       "r14": {
                "name": "Charging State",
                "value": "0" 
              },
       "r18": {
                "name": "Charge",
                "value": "0"
              },
       "r19": {
                "name": "Capacity",
                "value": "0"
              }
            }
}

我正在使用Qt Creator和c ++。我对c ++并不十分精通,从未使用过Qt(库函数与此打包),所以我认为我第一次使用Qt json解析器和url请求的尝试是错误的。然后我在https://stackoverflow.com/a/13096222/2415349复制了Evgeny的代码。他的代码检索json文件,但是所有的'值都是'是零。

我尝试将fetch / parse函数放在循环中,但每次都返回相同的内容。

奇怪的是,我可以使用json和urllib2库在python中获取带有填充值的json文件。

任何人都可以解释为什么会这样吗?我只解析过我机器上的文件。当roomba被关闭时,请求是否只能获得默认的json?我的计算机或浏览器是否需要以某种方式设置(我正在使用Mac OSX 10.9.4)。

编辑:这是我从Evgeny的回答中使用的代码(也使用了get_http())

string get_http(const string &server,const string &path);
using namespace boost::property_tree;
stringstream temp;
temp << get_http("10.0.0.1","/roomba.json");
cout << "Original JSON:" << endl;
cout << temp.str();
cout << string(256,'*') << endl;
ptree root;
read_json(temp,root);
cout << "Printed as XML:" << endl;
write_xml(cout,root);

当temp.str()和root被打印到cout时,我看到了上面提到的输出。

编辑2:

我意识到请求正在返回相同的json。我原来的设置是运行应用程序,并观察程序返回的输出。然后我会停止应用程序,并手动转到10.0.0.1/roomba.json。

有没有人知道为什么当应用程序运行时json文件被设置为全零,但是当它不是(但我连接到设备)时,json文件输出数据?

0 个答案:

没有答案