博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jsoncpp Compiler、Programming
阅读量:5887 次
发布时间:2019-06-19

本文共 4014 字,大约阅读时间需要 13 分钟。

catalog

1. C++ jsoncpp简介2. Jsoncpp的下载与编译3. Linux Jsoncpp的SDK编译 & 简单实例4. Windows Jsoncpp的SDK编译 & 简单实例

 

1. C++ jsoncpp简介

jsoncpp是c++解析JSON串常用的解析库之一。其常用的类有

1. Json::Value: jsoncpp中最基本、最重要的类,用于表示各种类型的对象,jsoncpp支持的对象类型可见Json::ValueType枚举值2. Json::Reader: 用于读取、将字符串转换为Json::Value对象3. Json::Writer: 一个纯虚类,并不能直接使用。在此我们使用Json::Writer的子类    1) Json::FastWriter    2) Json::StyledWriter    3) Json::StyledStreamWriter

Jsoncpp中所有对象、类名都在namespace json中,包含json.h即可

Relevant Link:

http://blog.csdn.net/fengshuiyue/article/details/8724204

 

2. Jsoncpp的下载与编译

1. 从gitbub上下载源代码: https://codeload.github.com/open-source-parsers/jsoncpp/zip/master2. unzip master3. cd jsoncpp-master4. scons platform=linux-gcc//gcc版本是4.8的,上面的命令执行完后,会在./libs/linux-gcc-4.8目录下面生成库文件-rw-r--r-- 1 root root 1068476 Jun 29 14:51 libjson_linux-gcc-4.8_libmt.a-rwxr-xr-x 1 root root  588508 Jun 29 14:51 libjson_linux-gcc-4.8_libmt.so*/*.so需要随主程序下发到客户端机器上,并添加到客户端的include搜索路径中.a可以使用静态编译直接集成编译到主程序中*/

Relevant Link:

https://github.com/open-source-parsers/jsoncpp

 

3. Linux Jsoncpp的SDK编译 & 简单实例

0x1: 反序列化Json对象字符串

jscpp1.cpp

#include 
#include
#include "json/json.h" int main(void){ std::string strValue = "{\"key1\":\"value1\",\"array\":[{\"key2\":\"value2\"},{\"key2\":\"value3\"},{\"key2\":\"value4\"}]}"; Json::Reader reader; Json::Value value; if (reader.parse(strValue, value)) { std::string out = value["key1"].asString(); std::cout << out << std::endl; const Json::Value arrayObj = value["array"]; for (int i = 0; i

编译链接

g++ -o jsoncpp1 jscpp1.cpp -I/zhenghan/jsonCPP/jsoncpp-master/include /zhenghan/jsonCPP/jsoncpp-master/libs/linux-gcc-4.8/libjson_linux-gcc-4.8_libmt.a

0x2: 序列化构建Json对象

先构建一个Json对象,此Json对象中含有数组,然后把Json对象序列化成字符串

jscpp2.cpp

#include 
#include
#include "json/json.h" int main(void){ Json::Value root; Json::Value arrayObj; Json::Value item; for (int i = 0; i < 10; i ++) { item["key"] = i; arrayObj.append(item); } root["key1"] = "value1"; root["key2"] = "value2"; root["array"] = arrayObj; //root.toStyledString(); std::string out = root.toStyledString(); std::cout << out << std::endl; return 0;}

编译链接

g++ -o jsoncpp2 jsoncpp2.cpp -I/zhenghan/jsonCPP/jsoncpp-master/include /zhenghan/jsonCPP/jsoncpp-master/libs/linux-gcc-4.8/libjson_linux-gcc-4.8_libmt.a

Relevant Link:

http://www.cnblogs.com/logicbaby/archive/2011/07/03/2096794.htmlhttp://www.cnblogs.com/xudong-bupt/p/3696329.html

 

4. Windows Jsoncpp的SDK编译 & 简单实例

0x1: 编译链接

1. 下载jsoncpp2. 解压3. 打开jsoncpp-src -> makefiles -> msvc2010 -> jsoncpp.sln4. 分别选择debug/released模式5. 在"解决方案资源管理器"中右击lib_json,选择 -> 仅用于项目 -> 仅生成lib_json6. 再次右击lib_json,选择 -> 仅用于项目 -> 仅链接lib_json 7. 生成的.lib文件夹在.\makefiles\msvc2010中

最终生成windows下的.lib静态链接库文件

0x2: 简单示例

1. 在jsonCPP源代码文件夹中创建文件夹include、lib2. 在include中创建文件夹json,将jsoncpp-src -> include -> json 中的.h文件全部复制过来3. 在lib中创建文件夹debug和release,把上一步编译生成的.lib文件复制过来//新建一个windows console控制台项目4. 选择项目 -> 属性5. 选择配置属性 -> C/C++ -> 常规,右边的"附加包含目录",附加包含目录: D:\study\toolsForVS2010\jsonPP\include6. 选择配置属性 -> C/C++ -> 代码生成,右边的"运行库",选择MTd7. 选择配置属性 -> 链接器 -> 常规,右边的"附加库目录",添加lib文件夹(静态链接库)路径8. 选择配置属性 -> 链接器 -> 输入,右边的"附加依赖项",添加lib文件9. 点击应用完成json配置//若项目需要发布时(即项目选择release)10. 配置属性 -> C/C++ -> 代码生成,右边的"运行库",选择MT11. 选择配置属性 -> 链接器 -> 常规,右边的"附加库目录",添加lib文件夹 12. 然后可以运行程序获得release版本程序

main.cpp

// AliHealthExamination.cpp : 定义控制台应用程序的入口点。//#include 
#include
#include
#include "json/json.h" using namespace std; #pragma comment(lib,"lib_json") void main() { ifstream ifs; ifs.open("test.json", ios::out|ios::in); if(!ifs.is_open()) { cout<<"fail to open file."<

json文件与生成结果

1. json文件:[{
"name":"kanguolai","age":25},{
"name":"kanguoqu","age":18}]2. 生成结果

Relevant Link:

http://blog.csdn.net/guowenyan001/article/details/10378195http://my.oschina.net/mjRao/blog/160672

 

Copyright (c) 2015 LittleHann All rights reserved

 

你可能感兴趣的文章
程序员怎么留住健康?
查看>>
(转)C# 把我所积累的类库全部分享给博友(附件已经上传)
查看>>
Silverlight5 无法切换输入法,无法输入中文的原因及解决初探
查看>>
游戏开发基础:方向键的组合,八方向实现
查看>>
黑书-DP-方块消除 ****
查看>>
MySQL 分区
查看>>
我的架构经验系列文章 - 后端架构 - 语言层面
查看>>
DEFERRED_SEGMENT_CREATION
查看>>
读取手机硬件信息
查看>>
一致哈希
查看>>
The connection to adb is down, and a severe error has occured. 问题解决
查看>>
在Jenkins中配置运行远程shell命令
查看>>
代码杂记
查看>>
linux中防CC攻击两种实现方法(转)
查看>>
《Programming WPF》翻译 第9章 4.模板
查看>>
Windows7+VS2012下OpenGL 4的环境配置
查看>>
Linux Kernel中断子系统来龙去脉浅析【转】
查看>>
Linux NFS服务器的安装与配置
查看>>
Ada boost学习
查看>>
Unity中SendMessage和Delegate效率比较
查看>>