视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
jsoncpp中获取key的方法
2025-09-29 02:35:45 责编:小OO
文档
jsoncpp中获取key的方法

我承认,之所以存在这篇文章,是因为我太菜了,以至于我连搜索的关键字都无法确定!

这打击了我的信心,伤害了我强壮但幼小的心灵,为了祭奠,特此博文。

首先,铺一下需求:

$arr = array('key1'=>array('value1'),'key2'=>array('value2'),'key3'=>'value3');

echo $json = json_encode($arr);

输出的内容如下:

{“key1″:["value1"],”key2″:["value2"],”key3″:”value3″}

熟悉JSON的人我不多说了,我承认我不属于这类人……

那么,我们如何用jsoncpp来解析这段json数据呢?这个在jsoncpp的例子中已经写的很明白了:

...

string jsonStr = 上面的那陀json字符串;

Json::Reader reader;

Json::Value value;

reader.parse(jsonStr,value);

cout << value["key3"].toString() << endl;

...

正常情况下,你应该会看到输出的“value3”。

如果没有,那就是逆天!

好吧,不得不承认,多数人已经认为掌握了jsoncpp!

不管你信不信,我是信了,直到有一天,我有了新的疑问:如果我不知道“key3”这个key呢?

我靠,确实如此吧,你无法在任何场景下都能知道要解析的json数据中就一定存在某个key!

然后,我开始烦迷糊了,多半是因为我太了解php的缘故,php强大的array让我的思路总是受到影响!

我开始查找c++的for语法,我总认为应该有对应的foreach或是for...in...语法!

我甚至都开始抱怨,为毛c++的数组不支持字符串下标!

看到这里,可能让你贱笑了!但我确实这么想过!

好吧,其实c++的数组根本就不支持字符串下标,应该转而使用标准库中的map容器!

我们在此不说map,继续扯jsoncpp!

我认为它内部在解析完后肯定包括key和value,至于是不是用的map,我不深究了!

google找了不少例子,都是相互转发,实在没有让我能得到启发的代码片段!

直到我找到了jsoncpp的这个类:

Json::Value::Members

这是关键,看下面代码:

...

string jsonStr = 上面的那陀json字符串;

Json::Reader reader;

Json::Value value;

reader.parse(jsonStr,value);

Json::Value::Members member = value.getMemberNames();

for(Json::Value::Members::iterator iter = member.begin(); iter != member.end(); ++iter)

{

cout << (*iter) << endl;

}

...

运行结果:

key1

key2

key3 

爽了吧?这就是我要的结果!

PS:其实看上段代码中的for,再看看Members的定义,就明白了:

typedef std::verctor Members

1.Json::Value value;  

2.Json::Reader reader;  

3.Json::Value::iterator iter;  

4.Json::Value::Members members;  

5.bool parsingSuccessful = reader.parse( json_str, value );  

6.if (parsingSuccessful) {  

7.  members = value.getMemberNames();  

8.  for (Json::Value::Members::iterator it = members.begin();  

9.    it != members.end(); ++it) {  

10.    std::string name = *it;  

11.    std::string value_str = value[name].asString();  

12.    cout<13.  }  

14.}  下载本文

显示全文
专题