Jsoncpp试用指南

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。在官方主页(中文)上有个简单的介绍(图比较形象),

jsoncpp是一个c++封装的json包,跨平台支持windows、linux、unix等多系统。官方提供的编译需要使用到scons(一个基于python语言编写的编译工具,类似于autoconfig等工具),0.5版本的需要python2.6的支持——坑爹啊。

反正有源码包,就自己改了个Makefile,编译生成了静态链接库libjsoncpp.a和动态链接库libjsoncpp.so。

关于json的教程,在sf主页http://jsoncpp.sourceforge.net/有详细的文档。

试用测试代码

View Code
#include <json/json.h>
#include
<iostream>
int main()
{
Json::Value root;
Json::Value arrayObj;
Json::Value item;
for (int i=0; i<10; i++)
{
item[
"key"] = i;
arrayObj.append(item);
}

root[
"key1"] = "value1";
root[
"key2"] = "value2";
root[
"array"] = arrayObj;
root.toStyledString();
std::
string out = root.toStyledString();
std::cout
<< out << std::endl;
}

该段代码输出的并没有涉及到json文件的解析。只是以json的格式显示出来。

简单的中文介绍参照博客 http://blog.csdn.net/vagrxie/archive/2010/07/22/5754179.aspx

下面演示如下读写(官方上也有介绍的哦)。代码如下

#include <json/json.h>
#include
<iostream>
#include
<fstream>
using namespace std;
int main()
{
Json::Value value;
ifstream
in("public.json");
string str;
string msg;
if(in.is_open())
{
while(in>>str)
msg
+= str;
}
Json::Reader reader;

int ret = reader.parse(msg,value);

  if(ret)
{
string url = value["text"].asString();
string date = value["created_at"].asString();
cout
<<value["privacy"].asInt()<<endl;
cout
<<url<<"\t"<<date<<endl;
}
in.close();
return 0;
}

这段代码解析的digu的API返回的网页结果。可以正确输出。

但是digu API  http://api.minicloud.com.cn/statuses/public_timeline.json返回的格式为无名数组。

那么又该如何解析呢?

参考代码如下

  reader.parse(apiret,value);
  
for(int i = 0;i < value.size();++i)
  {
    
string text = value[i]["text"].asString();
    cout
<<text<<endl;
  }

json对数组的解析还支持STL的风格。即

Json::Value::Members member;//Members 这玩意就是vector<string>,typedef了而已
for (Json::Value::iterator itr = objArray.begin(); itr != objArray.end(); itr++)
{
member
= (*itr).getMemberNames();
for (Json::Value::Members::iterator iter = member.begin(); iter != member.end(); iter++)
{
string str_temp = (*itr)[(*iter)].asString();
}
}

此种风格与上面的类似,只是上面的只是取"text"节点,而后一种是输出所有节点。

posted @ 2011-06-13 19:35  westfly  阅读(3701)  评论(0编辑  收藏  举报