Jsoncpp Compiler、Programming
catalog
. C++ jsoncpp简介
. Jsoncpp的下载与编译
. Linux Jsoncpp的SDK编译 & 简单实例
. Windows Jsoncpp的SDK编译 & 简单实例
1. C++ jsoncpp简介
jsoncpp是c++解析JSON串常用的解析库之一。其常用的类有
. Json::Value: jsoncpp中最基本、最重要的类,用于表示各种类型的对象,jsoncpp支持的对象类型可见Json::ValueType枚举值
. Json::Reader: 用于读取、将字符串转换为Json::Value对象
. Json::Writer: 一个纯虚类,并不能直接使用。在此我们使用Json::Writer的子类
) Json::FastWriter
) Json::StyledWriter
) Json::StyledStreamWriter
Jsoncpp中所有对象、类名都在namespace json中,包含json.h即可
Relevant Link:
http://blog.csdn.net/fengshuiyue/article/details/8724204
2. Jsoncpp的下载与编译
. 从gitbub上下载源代码: https://codeload.github.com/open-source-parsers/jsoncpp/zip/master
. unzip master
. cd jsoncpp-master
. scons platform=linux-gcc
//gcc版本是4.8的,上面的命令执行完后,会在./libs/linux-gcc-4.8目录下面生成库文件
-rw-r--r-- root root Jun : libjson_linux-gcc-.8_libmt.a
-rwxr-xr-x root root Jun : libjson_linux-gcc-.8_libmt.so*
/*
.so需要随主程序下发到客户端机器上,并添加到客户端的include搜索路径中
.a可以使用静态编译直接集成编译到主程序中
*/
Relevant Link:
https://github.com/open-source-parsers/jsoncpp
3. Linux Jsoncpp的SDK编译 & 简单实例
0x1: 反序列化Json对象字符串
jscpp1.cpp
#include <iostream>
#include <string>
#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 = ; i<arrayObj.size(); i++)
{
out = arrayObj[i]["key2"].asString();
std::cout << out;
if (i != arrayObj.size() - )
std::cout << std::endl;
}
}
return ;
}
编译链接
g++ -o jsoncpp1 jscpp1.cpp -I/zhenghan/jsonCPP/jsoncpp-master/include /zhenghan/jsonCPP/jsoncpp-master/libs/linux-gcc-4.8/libjson_linux-gcc-.8_libmt.a
0x2: 序列化构建Json对象
先构建一个Json对象,此Json对象中含有数组,然后把Json对象序列化成字符串
jscpp2.cpp
#include <iostream>
#include <string>
#include "json/json.h" int main(void)
{
Json::Value root;
Json::Value arrayObj;
Json::Value item; for (int i = ; i < ; 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 ;
}
编译链接
g++ -o jsoncpp2 jsoncpp2.cpp -I/zhenghan/jsonCPP/jsoncpp-master/include /zhenghan/jsonCPP/jsoncpp-master/libs/linux-gcc-4.8/libjson_linux-gcc-.8_libmt.a
Relevant Link:
http://www.cnblogs.com/logicbaby/archive/2011/07/03/2096794.html
http://www.cnblogs.com/xudong-bupt/p/3696329.html
4. Windows Jsoncpp的SDK编译 & 简单实例
0x1: 编译链接
. 下载jsoncpp
. 解压
. 打开jsoncpp-src -> makefiles -> msvc2010 -> jsoncpp.sln
. 分别选择debug/released模式
. 在"解决方案资源管理器"中右击lib_json,选择 -> 仅用于项目 -> 仅生成lib_json
. 再次右击lib_json,选择 -> 仅用于项目 -> 仅链接lib_json
. 生成的.lib文件夹在.\makefiles\msvc2010中
最终生成windows下的.lib静态链接库文件
0x2: 简单示例
. 在jsonCPP源代码文件夹中创建文件夹include、lib
. 在include中创建文件夹json,将jsoncpp-src -> include -> json 中的.h文件全部复制过来
. 在lib中创建文件夹debug和release,把上一步编译生成的.lib文件复制过来
//新建一个windows console控制台项目
. 选择项目 -> 属性
. 选择配置属性 -> C/C++ -> 常规,右边的"附加包含目录",附加包含目录: D:\study\toolsForVS2010\jsonPP\include
. 选择配置属性 -> C/C++ -> 代码生成,右边的"运行库",选择MTd
. 选择配置属性 -> 链接器 -> 常规,右边的"附加库目录",添加lib文件夹(静态链接库)路径
. 选择配置属性 -> 链接器 -> 输入,右边的"附加依赖项",添加lib文件
. 点击应用完成json配置
//若项目需要发布时(即项目选择release)
. 配置属性 -> C/C++ -> 代码生成,右边的"运行库",选择MT
. 选择配置属性 -> 链接器 -> 常规,右边的"附加库目录",添加lib文件夹
. 然后可以运行程序获得release版本程序
main.cpp
// AliHealthExamination.cpp : 定义控制台应用程序的入口点。
// #include <fstream>
#include <iostream>
#include <string>
#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."<<endl;
return;
} Json::Reader reader;
Json::Value root;
if(!reader.parse(ifs, root))
{
cout<<"fail to parse."<<endl;
return;
} string s_name;
int i_age;
for(int i=; i<root.size(); ++i)
{
s_name = root[i]["name"].asString();
i_age = root[i]["age"].asInt(); cout<<"name:"<<s_name.c_str()<<", "<<"age:"<<i_age<<endl;
} }
json文件与生成结果
. json文件:[{"name":"kanguolai","age":},{"name":"kanguoqu","age":}]
. 生成结果
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAR4AAAA2CAIAAACeI2FuAAAEnElEQVR4nO2dW3bbMAxEuZ485GQBbZw4q2iezUq5tH7k1JVEYAiCpCSrc78YiRoMQMJ2j+wq3D9/BUJIc+6ef69tgZA9wtYipAuHE1uLkA4cTp/aqZiQVSua3BAQUTyFfc6Oj/+sTM1XTCDStdq913H5fbIow9NHCMGyL+2FWKVk9S2kHW/YWthqjcNKSyKtku2qv11uH9+DbQk33lpp3Kx5o88FWquy+TfLpfjsws3x9XuQ3Xzp2L7w2vxWx42GfT6Bjs8nENFCY0tANptX9pQ2P5tvqb4jrgbQsdenluuHFy12ULLSxvYcUhsWfYtOULajxSf276iDPS6+XEtn5icouWuBxpMtrhz5atOK9C1xNVlLfUr1rVz9fBn/abcyZqYpiojz8XFRFsSt9Jktgl2/NK49HXGcXqIdFEVissRFdQD5ankV6YO4QFb0E6T64Pl+rn78Ep2BcTa8sb7ZkhWtE55v0S/VaZWXQwqUIv7FLhKVZXXUAVyCs/PpW2TFs3aTftLWCtOiiyuBU60sma/E+IjFZ2//FquO0GH0xiXqZMdi6Po6gLxa6Z+PWHQ0P1jfj9haY8fAAchTvBbXpVQ/PS6mIE6w+ATGjH5wXpqUdmQmiH1qcVMdPB8nks1XzAvUIT2C41r0RR2Qb2jF9fTfWoSQNtw8vK5tgZA9cnt8X9sCIXvk+4tOhJDGgK/nEkL83PFHJYT0gD+FJKQLK7ZW+zsJ1fjub2wtixRwn6fLLR0SQlj3v53Z5orurLW0W64bt33xLNZa4K75MgbsbNOVEe3dCY9Je+6fv8CngtIPEuDTRba10jGOq4mng6B8yUX0mU4G87GOnaK8cFzsB9SENObcWt9/WnbbeLGDbStriNdm43Yai0Etpxru0Sb+LeJh2p+t/JN/4NYSq38eR6m1ilZLm4zjdhrPomf9gPmlOPIFfkAI31niAbRWdhyl1tICiftAvHatcerKN7+UJp5nalqdLR5IGzq1lra6YMmzOkA/TnHkorlyzAf5irTKS4vrrgOpwviBMChbP0grVLSlwEqDuFoIi3/gMybYdUDoolKIV2niFn2LSaNPUsAOHqeQ7vU13bSzscG8SAE7aK2w31ffveb1X7CP1iJkc7C1COkCW4uQLrC1COkCW4uQLvD3WvtDuy3Gai/Kur8y5mI3Jy0p74+tw93pc5lA4qsmV9qN/asVbK11ODx9xCnjs+LxmIDnz06lB7UxjquJp4OQbKlWOqUUxQXzg1JP0aEmTvpyeHy3bB1xTv0WzC65prmFcQ394ooz44ga26SA4fgGljBOmc2JUmsVraI2GcfdyNiBI6+ieooOz0eKdEgtw/HVvb2i1FpaIHFdxWsvZVxK21hiPcWrWvknZQwPXVpLW2DLqju2XZziyMUXV8tLpJV/HFebqZ0lvQCtFabrlw7SS9L9AcjuJBBXC2HxD3zGKVmdNAt7yuJVmrhFPyb4dEgbhuPFPwQo7Zm2mvXT7CLc/fthOL6tbaEBbV+Vl3+N57vKDhke+XwtQjpw4PO1COkBW4uQLvDRdYR0gY+uI6QLbC1CusCnQhLSgz8xYRemHdJ8qwAAAABJRU5ErkJggg==" alt="" />
Relevant Link:
http://blog.csdn.net/guowenyan001/article/details/10378195
http://my.oschina.net/mjRao/blog/160672
Copyright (c) 2015 LittleHann All rights reserved
Jsoncpp Compiler、Programming的更多相关文章
- JsonCpp的简单使用方法
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programming Langu ...
- [计算机、网络相关历史]unix简史
本文2001年由台湾“网络农夫”所写,其人生平不祥,此文受鸟哥大力推崇,两人应该相识.文章写得很不错,应该是查了很多资料整理而成的,美中不足的是好多语句不通顺,国考语文绝对不及格,哈哈. 0.我的准备 ...
- Hadoop、Pig、Hive、Storm、NOSQL 学习资源收集
(一)hadoop 相关安装部署 1.hadoop在windows cygwin下的部署: http://lib.open-open.com/view/1333428291655 http://blo ...
- 课程四(Convolutional Neural Networks),第一周(Foundations of Convolutional Neural Networks) —— 3.Programming assignments:Convolutional Model: application
Convolutional Neural Networks: Application Welcome to Course 4's second assignment! In this notebook ...
- jsoncpp 0.5 ARM移植
1.下载jsonapp 0.5 https://github.com/open-source-parsers/jsoncpp 2.编译 platform 没有包含 arm 平台,需要把源码提取出来,独 ...
- Hadoop、Pig、Hive、NOSQL 学习资源收集
转自:http://www.cnblogs.com/zzjhn/p/3855566.html (一)hadoop 相关安装部署 1.hadoop在windows cygwin下的部署: http:// ...
- XJCO1711 Procedural Programming
University of Leeds School of ComputingProcedural Programming XJCO1711Semester 1, 2019-2020Coursewor ...
- 终极解决办法rvct Cannot obtain license for Compiler (feature compiler) with license version >= 3.1
参考:https://blog.csdn.net/nic_r/article/details/7458038 ARM C/C++ Compiler, RVCT4. [Build ] armcc : e ...
- Linux实现树莓派3B的国密SM9算法交叉编译——(一)环境部署、简单测试与eclipse工程项目测试
这篇文章主要介绍了交叉编译的实现,包括环境部署,并简单测试交叉编译环境是否安装成功. 一.交叉编译 在一个平台上生成另一个平台上的可执行代码.为什么要大费周折的进行交叉编译呢?一句话:不得已而为之.有 ...
随机推荐
- DefaultFilesMiddleware中间件如何显示默认页面
DefaultFilesMiddleware中间件如何显示默认页面 DefaultFilesMiddleware中间件的目的在于将目标目录下的默认文件作为响应内容.我们知道,如果直接请求的就是这个默认 ...
- mac上如何卸载oracle jdk 1.7
目前mac上有一些软件还不支持jdk1.7,只能卸载1.7,恢复到1.6,下面二个链接是官网给出的卸载方法: http://www.java.com/zh_CN/download/help/mac_u ...
- Java7并发编程实战(一) 线程的管理
1:线程的创建 1:继承Thread类,并且覆盖run()方法 2:创建一个实现Runnable接口的类.使用带参数的Thread构造器来构造 2:example-->计算打印乘法表 首先 ...
- 关于printf函数的所思所想
缘起大一下学期,C语言程序设计徐小青老师的随口一提,经娄嘉鹏老师提醒,我觉得应该自己整理清楚这一问题.涉及网上资料将会标明出处. 关于printf函数的所思所想 * printf的定义 printf( ...
- 20145222GDB调试汇编堆栈过程分析
GDB调试汇编堆栈过程分析 实践代码example.c #include<stdio.h> short addend1 = 1; static int addend2 = 2; const ...
- Python2.2-原理之类型和运算
此节来自于<Python学习手册第四版>第二部分 一.Python对象类型(第4章) 1. Python可以分解成模块.语句.表达式以及对象:1.程序由模块构成:2.模块包含语句:3.语句 ...
- [Python]新手写爬虫全过程(已完成)
今天早上起来,第一件事情就是理一理今天该做的事情,瞬间get到任务,写一个只用python字符串内建函数的爬虫,定义为v1.0,开发中的版本号定义为v0.x.数据存放?这个是一个练手的玩具,就写在tx ...
- tomcat设置端口号和默认webapp
tomcat一下载,解压之后webapps目录下自带几个webapp: * docs文档:这是一个静态页面集,不用启动tomcat也可以阅读 * examples样例 * hostmanager主机管 ...
- 数据库高可用架构(MySQL、Oracle、MongoDB、Redis)
一.MySQL MySQL小型高可用架构 方案:MySQL双主.主从 + Keepalived主从自动切换 服务器资源:两台PC Server 优点:架构简单,节省资源 缺点:无法线性扩展,主从失 ...
- Day Four(Beta)
站立式会议 站立式会议内容总结 331 今天:增加了若干话题:建立chat–user类,查阅bmob文档. 明天: 学习bmob的sql操作 442 今天:登录信息在主页上更新数据 遇到的问题:无 明 ...