2012-10-26 93 views
4

我正在使用jsoncpp解析器(http://jsoncpp.sourceforge.net)来解析JSON数据。 所以,如果我们有如下的JSON:如何从json-cpp解析器获取属性名称和属性值?

{ "name": "Joseph", "age": 20 } 

我怎样才能获得属性约瑟夫,...岁和20后? OK,我们可以做普遍这样的:

string e = root.get(propertyName, defaultValue).asString(); 

真正我们想要的东西:

string e = root.get(name, "Mark").asString(); 

现在,可变ê是约瑟夫,它的工作原理。但我采取/写“名称”。我不想查询(不询问我想获得的功能“名称”(财产的名称)和“约瑟夫”(财产价值))。

这将是最好的(C/C++为例)存储后:

property[name][0] = "Joseph" 
property[age][0] = 20 

我怎么能这样做?还是其他想法?

+0

你从文档中学到了什么?在诉诸我们之前,你曾进行过哪些调查? –

+0

文档没有提到这个问题。 – RePRO

+0

我不知道你问题的最后一部分后的情况,但我试图在下面的答案中填写属性名称空缺。 –

回答

5

您可以使用getMemberNames()函数获取Json :: Value对象的所有成员名称。返回一个对象,您可以像使用其他标准库容器一样使用.begin().end()进行迭代。 (实际上,返回类型是std::vector<std::string>的别名。)

拥有成员名称之后,您应该可以遍历它们并使用.get(std::string &, const ValueType &),因为您已经在为获取每个对象的值键。


请注意,JSON对象本质上是无序的,所以您不一定依赖那个具有任何排序顺序的名称列表。如果你想要一个有序的对象,你应该使用JSON数组,而不是JSON对象。

+0

不,在未来的C++中,我需要这样的: string age = 20; string name =“Joseph”; void fc(age,name); 但是我们不知道属性名称**名称**。 – RePRO

+0

用你可以尝试的东西编辑。 –

+0

更好的编辑,谢谢。那这个呢?每个(var key在obj中)代码{ cout <<“name =”<< key <<“value =”<< obj [key]; }'code' – RePRO

-8

你基本上是问如何枚举键并提取相应的值?

read thedocumentation —这里列出了必要的函数调用。

+4

不知道这个答案。似乎提问者可能会有一些概念问题,并且这些问题可能不易通过链接到一个不耐烦的答案中嵌入的文档来解决。 –

+2

在文档中,您无法找到关于此特定问题的答案。 ;) – RePRO

+1

我怎么看,没人理解我。 ;) – RePRO