jsoncpp的简单使用
22 Oct 2013OS:ubuntu 12.04
JSONCPP : 0.5.0
关于JSONCPP
JSONCPP是一个比较流行的C/C++用来解析json的库,最新的版本是0.5.0,源代码下载地址点击 这里
JSONCPP的编译需要使用scons(ubuntu的用户直接apt-get install scons即可),编译成功后会在jsoncpp-src-0.5.0/libs/linux-gcc-4.7/
下生成一个libjson_linux-gcc-4.7_libmt.so
,开发头文件在include文件夹下。在编译自己的项目时需要加入-ljson_linux-gcc-4.7_libmt
编译参数。
JSON结构
Value
String
Number
Object
json中的object是“名称/值”对的无序集合,类似于STL中的map。一个object以左大括号’{‘开始,右大括号结束’}’,名称和值之间使用冒号’:’分割,“名称/值”对与“名称/值”对之间使用逗号’,’分割。object可以被嵌套,可以作为其他类型的子元素。 一些例子:
-
{“id” : 1}
-
{“id” : 1, “name” : “lnmcc”, “age” : 100}
Array
json中的数组,以左方括号’[‘开始,右方括号’]’结束,元素跟元素之间以逗号’,’分割。 一个例子:
- { “teacher” : [ {“name” : “lnmcc”}, {“name” : “word”} ] }
使用JSONCPP解析json文件
文件test.json内容:
{
"id":7,
"type":"pic",
"deps":[
{"order":1,"path":"/home/11.bmp"},
{"order":1,"path":"/home/22.bmp"},
{"order":1,"path":"/home/44.bmp"},
{"order":2,"path":"/home/44.bmp"}
]
}
bool parseFile2(std::string path) {
std::ifstream in;
in.open(path.c_str(), std::ifstream::in);
assert(in.is_open());
Json::Reader reader;
Json::Value value;
if (!reader.parse(in, value, false)) {
std::cerr << "paser json file error!" << std::endl;
return false;
}
std::cout << "id : " << value["id"].asInt() << std::endl;
std::cout << "type : " << value["type"].asString() << std::endl;
Json::Value array;
array = value["deps"];
for(unsigned int i = 0; i < array.size(); i++) {
std::cout << "order : " << array[i]["order"].asInt() << std::endl;
std::cout << "path : " << array[i]["path"].asString() << std::endl;
}
return true;
}
如果不是从文件读入, JSONCPP也可以直接处理json字符串:
bool parseString(std::string str) {
Json::Reader reader;
Json::Value value;
if (!reader.parse(str, value)) {
std::cerr << "paser json string error!" << std::endl;
return false;
}
... ...
return true;
}