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;}
运行结果:
问题来了:原数据与快速写数据元素顺序不一样,而带样式数据元素顺序相同。
- Jsoncpp使用简介
- jsoncpp使用简介
- JsonCpp使用简介
- jsoncpp简介、下载、编译、使用
- JsonCpp简介
- Jsoncpp简介
- jsoncpp简介
- Jsoncpp使用
- JsonCPP 使用
- JSONCPP使用
- 使用jsoncpp
- jsoncpp使用
- jsoncpp使用
- JsonCpp使用
- jsoncpp使用
- JsonCpp 使用
- JSONcpp使用.
- jsoncpp结构简介
- 关于C++引用的一些注意点
- M牛C原创博客——补充:OC开发中自动内存管理介绍
- selenium2+python如何启动Ie和Chrome进行自动化测试
- 公式怕忘记了,做个记号
- @Autowired与@Resource的区别
- Jsoncpp使用简介
- 5-14 数据结构啊poi A.暑假作业
- android错误:at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork
- C++ XML解析之TinyXML篇
- M牛C原创博客——IOS开发必备技能——安装离线xcode的api
- 关于控制文件转储后的trace文件中'Controlfile Checkpointed at scn'的含义
- hdu 1205 吃糖果(鸽巢原理)
- Hibernate HelloWorld-05 对象关系映射文件
- 列表生成式