Jsoncpp使用简介

来源:互联网 发布:淘宝上实木床有甲醛 编辑:程序博客网 时间:2024/05/22 03:27

Jsoncpp编译环境配置

1.      下载Jsoncpp最新源码,不同版本配置可能有细微区别,作者使用的是jsoncpp-0.10.2(https://github.com/open-source-parsers/jsoncpp/releases);

2.      在vs中打开源码工程(如F:\devlib\jsoncpp-0.10.2\makefiles\msvc2010),选择对应的开发模式Debug或Release,生成解决方案,就会生成相应的库;

3.      新建工程,选择属性àc/c++à附加包含目录,填上Json库include目录路径(如F:\devlib\jsoncpp-0.10.2\include),选择连接器à附加库目录,填上步骤2中生成的库目录(如F:\devlib\jsoncpp-0.10.2\makefiles\msvc2010\Debug),选择连接器à输入à附加依赖项,填上步骤2中生成的库名(如lib_json.lib),特别需要注意的是要把c/c++à代码生成à运行库的模式调成跟原Json工程中一致(如多线程调试/MTd

Jsoncpp基本用法说明

Json元素类型大概分3类:数组、json::Value对象、其他(int、string、double、bool、null等),如下Json窜:

{"array":[1,2,3],"boolean":true,"null":null,"int":123,"double":11.222,"object":{"a":"A","b":"B","v":"C"},"string":"你好"}

Jsoncpp中关键的类有3种Value、Reader、Writer的子类FastWriter与StyledWriter,Value类中有一个重要的重定义类型为Members(typedef std::vector<std::string> Members),可以用其迭代器访问元素,注意此类型只对Json::Value生效,不能作用于数组。Reader类主要提供了prase()方法用于反序列化数据,Writer子类主要提供了write()方法用于序列化数据。(特别要注意数组与Json::Value的区别,为这作者就没吃上午饭)

简单代码举例

#include <iostream>#include <string>#include <cassert>#include "json/json.h"using namespace std;static void printValueTree(Json::Value& value, char* name=""){if (Json::objectValue == value.type()){Json::Value::Members members(value.getMemberNames());Json::Value::Members::iterator it = members.begin();for (; it != members.end(); ++it){name = (char*)(*it).c_str();printValueTree(value[name], name);}}else if (Json::arrayValue == value.type()){cout << name << ":" << value << endl;}else{cout << name << ":" << value << endl;}}bool readJson(const string &str){if (str.empty()){return false;}  Json::Reader reader;Json::Value value;if (!reader.parse(str, value)){return false;}printValueTree(value);}void writeJson(const string &str){Json::Value value;value["array"].append(1);value["array"].append(2);value["array"].append(3);value["boolean"] = true;value["null"];value["int"] = 123;value["double"] = 11.222;value["object"]["a"] = "A";value["object"]["b"] = "B";value["object"]["c"] = "C";value["string"] = "你好";Json::FastWriter fWriter;Json::StyledWriter sWriter;cout << "原数据:" << endl;cout << str << endl;cout << "快速写数据:" << endl;cout << fWriter.write(value) << endl;cout << "带样式数据:" << endl;cout << sWriter.write(value) << endl;}int main(){string strValue1 = "{\"array\":[1,2,3],\"boolean\":true,\"null\":null,\"int\":123,\"double\":11.222,\"object\":{\"a\":\"A\",\"b\":\"B\",\"c\":\"C\"},\"string\":\"你好\"}";writeJson(strValue1);readJson(strValue1);return 0;}

运行结果:


问题来了:原数据与快速写数据元素顺序不一样,而带样式数据元素顺序相同。




0 0
原创粉丝点击