2011-09-26 78 views
3

我正在使用Jsoncpp为C++解析json格式。 我不明白它是如何工作的;缺乏使我开始的文档和示例,我想知道是否有人能给我一些快速指示。我发现的唯一例子涉及文件...Jsoncpp问题

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

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

由于

UPDATE:

1),例如,如何解析含有JSON消息这样的缓冲液:

char* buff; 
uint32_t buff_size; 

回答

6

也许这是你的问题的第一部分很好的示例:

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

Json::Value s = values.get("state","default value"); 
+0

是啊,这就是我要找的;我不知道如何在缓冲区上使用reader.parse()。更新OP – KaiserJohaan

+1

我认为使用缓冲区而不是字符串是没有问题的,但是如果你有'char buffer [max]'之类的东西,你可以使用'parse(buffer,buffer + max-1,values)'。 – deepmax

2

有任何东西,但缺乏的文件。是的,它主要是参考文档,但它很好,交叉链接很好。

  1. 只是read the documentation
  2. 只是use this class或可能use the other class
+1

我有,我不完全了解它,这就是为什么我要做这个话题 – KaiserJohaan

+0

@KaiserJohaan:比你必须解释你不明白它。 Json :: Reader :: parse方法有3个重载。一个用于输入流(可能是一个字符串流),一个用于字符串,表示为指向开始的指针,以及指向终止NUL的指针,另一个用于std :: string。 writer类有一个简单的'write'方法,它返回一个'std :: string',或者你可以使用标准的运算符'<<'将值写入一个ostream(包括stringstream)。然而你必须建立价值,这也是很好的文件。主页甚至有一个样本... –

+1

我不得不同意KaiserJohaan,这个json库的文档很缺乏。一旦你搞清楚了,它似乎工作得很好,但很难学会如何使用它。 – Alyoshak

1

山姆供大家参考PLE代码,如下:

file.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对于样品源上方。