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,然后在终端执行:
现在可以使用jsoncpp库文件了。
- sudo /sbin/ldconfig
测试程序:
- /*
- 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