安装配置序列化与反序列化生成Json解析Json
Jansson是一个用于解码、编码、操控JSON的C库:
-
简单直观的API和数据模型
-
没有依赖项
-
完整的Unicode支持(UTF-8)
安装
要使用Jansson,则需要先安装:
-
下载jansson(http://www.digip.org/jansson/releases)
-
解压(tar -xvf jansson-XXX.tar.bz2)
-
下载后即可安装了
./configure --prefix=/opt/jansson make sudo make install
配置
为使新安装的库生效,需要在(/etc/ld.so.conf.d)下添加
jansson.conf
配置文件:
/opt/jansson
然后执行sudo ldconfig,重新加载配置以生效。
序列化与反序列化
Jasson使用json_t表示json类型:
-
加载并生成json类:json_load从字符串中加载,json_load_file从文件中加载;
-
输出json字符串:json_dump输出字符串(返回的指针在不用时要及时释放掉),json_dump_file输出到文件中;
以解析如下格式的json为例进行说明:
//struct { // string name; // int age; // string class[]; //};
生成Json
通过json_object或json_array构造json_t,并在不用时通过json_delete来释放:
std::string buildJson(const std::string &strName, int nAge, std::vector<std::string> vClass){ json_t *root = json_object(); json_object_set_new(root, "name", json_string(strName.c_str())); json_object_set_new(root, "age", json_integer(nAge)); auto *array = json_array(); for(auto cls : vClass){ json_array_append(array, json_string(cls.c_str())); } json_object_set_new(root, "class", array); auto *json = json_dumps(root, JSON_INDENT(0)); std::string strJson = json; free(json); json_delete(root); json_delete(array); return strJson; }
解析Json
通过json_loads加载后进行分析,在用完时通过json_decref解除引用。
bool parseJson(const std::string &strJson){ json_error_t error; // root = json_load_file(file, 0, &error) json_t *root = json_loads(strJson.c_str(), 0, &error); if(!root){ std::cout<<"load json fail: "<<error.text<<std::endl; return false; } std::cout<<"################Json###############"<<std::endl; auto item = json_object_get(root, "name"); if(json_is_string(item)){ std::cout<<"name: "<<json_string_value(item)<<std::endl; } item = json_object_get(root, "age"); if(json_is_integer(item)){ std::cout<<"age: "<<json_integer_value(item)<<std::endl; } auto array = json_object_get(root, "class"); if(json_is_array(array)){ std::cout<<"class: "; for(int i=0; i<json_array_size(array); ++i){ auto cls = json_array_get(array, i); std::cout<<json_string_value(cls)<<", "; } std::cout<<std::endl; } json_decref(root); return true; }
标签:std,string,jansson,C++,Jansson,json,array,root From: https://www.cnblogs.com/opensmarty/p/16853433.html