3

我正在使用 Jsoncpp 来解析 c++ 的 json 格式。我不明白它是如何工作的;缺乏帮助我入门的文档和示例,我想知道是否有人可以给我一些快速的指示。我发现的唯一例子涉及文件......

  1. 我正在使用 HTTP 堆栈在缓冲区中获取 json 消息。例如,缓冲区包含消息{"state":"Running"}。我如何使用 Json::reader 来解析这个?同样,我发现的唯一示例涉及从文件中读取

  2. 你如何将值写入 Json 消息?"monkey : no"例如,我想写"running : yes"一个 Json 消息,然后我可以在我的 GET 请求中使用它。

谢谢

更新:

关于 1),例如,如何解析包含这样的 json 消息的缓冲区:

char* buff;
uint32_t buff_size;
4

3 回答 3

6

也许这是您问题第一部分的好样本:

Json::Value values;
Json::Reader reader;
reader.parse(input, values);

Json::Value s = values.get("state","default value");
于 2011-09-26T11:46:44.360 回答
2

除了缺乏文档之外,什么都没有。是的,它主要是参考文档,但它非常好并且很好地交叉链接。

  1. 只需阅读文档
  2. 只需使用此类或可能使用其他类
于 2011-09-26T11:42:29.930 回答
1

示例代码供您参考,如下:

文件.json

{
"B":"b_val2",
"A":{
        "AA":"aa_val1", 
        "AAA" : "aaa_val2",
        "AAAA" : "aaaa_val3"
     },
"C":"c_val3",
"D":"d_val4"
}

jsoncpp使用场景如下,对于上面的示例 json 文件。

#include <iostream>
#include "json/json.h"
#include <fstream>

using namespace std;

int main(){

Json::Value root;
Json::Reader reader;
const Json::Value defValue;         //used for default reference
std::ifstream ifile("file.json");

bool isJsonOK = ( ifile != NULL && reader.parse(ifile, root) );
if(isJsonOK){

    const Json::Value s = root.get("A",defValue);
    if(s.isObject()){

        Json::Value s2 = s.get("AAA","");
        cout << "s2 : " << s2.asString() << endl;
    }else{
        cout << "value for key \"A\" is not object type !" << endl;
    }
}
else
    cout << "json not OK !!" << endl;

return 1;

}

输出::

s2:aaa_val2

此外,我已经使用“amalgamate.py”来生成和使用上面示例源的 jsoncpp。

于 2015-12-21T12:41:18.863 回答