jsoncpp 解析json

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Bobsweetie/article/details/72793340

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


猜你喜欢

转载自blog.csdn.net/Bobsweetie/article/details/72793340