版权声明:本文为博主原创文章,未经博主允许不得转载。 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