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