Github
Documentation
Install
Build From Source1 2 3 4 5 mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX=/opt/cpplibs .. make make install
使用包管理工具 缺点不能灵活控制版本 apt-get install libjsoncpp-dev
Examples json_v1.cpp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include <iostream> #include <json/json.h> #include <string> using namespace std;int main (int argc, char * argv[]) { string jsonStr = "{\"name\": \"xxx\", \"array\": [\"a\", \"b\", \"c\"], \"obj\": {\"k\" : \"v\"}}" ; Json::Reader reader; Json::Value value; if (reader.parse (jsonStr, value)) { cout<<value["name" ].asString ()<<endl; for (int i = 0 ; i < value["array" ].size (); i++){ cout<<i<<":" <<value["array" ][i].asString ()<<endl; } cout<<value["obj" ]["k" ].asString ()<<endl; } return 0 ; }
compile: g++ -I/opt/cpplibs/include/ -o json_v1 json_v1.cpp /opt/cpplibs/lib/libjsoncpp.a && ./json_v1
output
1 2 3 4 5 6 7 8 9 10 11 12 13 14 json_v1.cpp: In function ‘int main(int, char**)’: json_v1.cpp:20:18: warning: ‘Reader’ is deprecated: Use CharReader and CharReaderBuilder instead [-Wdeprecated-declarations] Json::Reader reader; ^~~~~~ In file included from /data/cpplibs/include/jsoncpp/json/json.h:11:0, from json_v1.cpp:10: /data/cpplibs/include/jsoncpp/json/reader.h:35:83: note: declared here class JSONCPP_DEPRECATED("Use CharReader and CharReaderBuilder instead") JSON_API Reader { ^~~~~~ xxx 0:a 1:b 2:c v
注意这里使用老版本reader api会引起警告
Example New Api json_v2.cpp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #include <iostream> #include <json/json.h> #include <string> #include <memory> using namespace std;int main (int argc, char * argv[]) { string jsonStr = "{\"name\": \"xxx\", \"array\": [\"a\", \"b\", \"c\"], \"obj\": {\"k\" : \"v\"}}" ; Json::Value value; JSONCPP_STRING errs; Json::CharReaderBuilder readerBuilder; std::unique_ptr<Json::CharReader> const reader (readerBuilder.newCharReader()) ; bool res = reader->parse (jsonStr.c_str (), jsonStr.c_str () + jsonStr.length (), &value, &errs); if (res && errs.empty ()) { cout<<value["name" ].asString ()<<endl; for (int i = 0 ; i < value["array" ].size (); i++){ cout<<i<<":" <<value["array" ][i].asString ()<<endl; } cout<<value["obj" ]["k" ].asString ()<<endl; }else { cout<<"json parse fail:" <<errs<<endl; } return 0 ; }
源码方式 g++ -I/opt/cpplibs/include/ -o json_v2 json_v2.cpp /opt/cpplibs/lib/libjsoncpp.a && ./json_v2
如果使用包管理 共享库方式编译 g++ -I/usr/include/jsoncpp -ljsoncpp -o json_v2 json_v2.cpp 静态库方式编译 g++ -I/usr/include/jsoncpp -ljsoncpp -o json_v2 json_v2.cpp /usr/lib/x86_64-linux-gnu/libjsoncpp.a
output 已经没有警告了
判断类型 bool isXxx()
isNull
isBool
isInt
isInt64
isNumbeic
isString
isObject
isArray
转换原生类型 asXxx()
asInt
asInt64
asBool
asDouble
访问字段
[] 方式访问 val[“field”]
key是否存在 isMember(“field”)
转成格式化字符串
流操作
读取: Json::parseFromStream
输出: writeString 1 2 3 4 5 6 7 Json::StreamWriterBuilder wbuilder; wbuilder["indentation" ] = "\t" ; std::string document = Json::writeString (wbuilder, root); Json::CharReaderBuilder rbuilder; rbuilder["collectComments" ] = false ; std::string errs; bool ok = Json::parseFromStream (rbuilder, std::cin, &root, &errs);