jsoncpp 解析json

JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,了解json请参考其官网http://json.org/,本文不再对json做介绍,将重点介绍c++的json解析库的使用方法。json官网上列出了各种语言对应的json解析库。下面的教程会介绍如何用jsoncpp库来解析json数据。


1、安装jsoncpp

下载:

git clone https://github.com/open-source-parsers/jsoncpp.git

解压后,进入jsoncpp的根目录编译:

scons platform=linux-gcc

之后会在libs目录下生成两个哭文件,一个静态库的一个动态库:

libjson_linux-gcc-4.6_libmt.so,libjson_linux-gcc-4.6_libmt.a


将这两个库文件拷贝到/usr/local/lib,然后在终端执行:

sudo /sbin/ldconfig
现在可以使用jsoncpp库文件了。



测试程序:

/*
g++ json_test.cpp -ljson_linux-gcc-4.8_libmt -o json_test
*/
//json的key字符流按照地一个字母的大小排序

#include <json/json.h>
#include <string>
#include <stdlib.h>
#include <iostream>
#include <fstream>

//#define READ 
using namespace std;

int main()
{
#ifdef READ
    ifstream is;
     is.open ("JsonText", std::ios::binary );
      Json::Reader reader;
      Json::Value root;
      if(reader.parse(is,root))   ///root保存整个Json对象的value
      {
           if(!root["name"].isNull())
           {
               cout<<root["name"].asString()<<endl;    ///读取元素
             Json::Value arrayObj = root["array"];
             for(int i=0 ; i< arrayObj.size() ;i++)
             {
                 cout<<arrayObj[i].asString()<<endl;
             }
           }
      }
#else 
      Json::Value root;
      Json::Value arrayObj;
      Json::Value item;
 
      for (int i = 0; i < 2; i ++)
      {
       arrayObj.append(i);    ///给arrayObj中添加元素(arrayObj变为数组)
      }
 
      root["key1"] = "value1";   ///给root中添加属性(arrayObj变为map)
      root["key2"] = "value2";
      root["array"] = arrayObj;
      root["b"]  ="bob";
      std::string out = root.toStyledString();   ///转换为json格式字符串
      std::cout << out << std::endl;

#endif
      return 0;
}
/*

{
    "name": "json",
    "array": [
           "123",
        "456",
        "789"
     ]
}

*/



编译:

g++ json_test.cpp -ljson_linux-gcc-4.8_libmt -o json_test




运行:

{
   "array" : [ 0, 1 ],
   "b" : "bob",
   "key1" : "value1",
   "key2" : "value2"
}

可以看到其中key排列顺序是按照key的第一个字母在字母表中的顺序排列的





参考:

http://www.cnblogs.com/xudong-bupt/p/3696329.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值