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工程项目测试
这篇文章主要介绍了交叉编译的实现,包括环境部署,并简单测试交叉编译环境是否安装成功. 一.交叉编译 在一个平台上生成另一个平台上的可执行代码.为什么要大费周折的进行交叉编译呢?一句话:不得已而为之.有 ...
随机推荐
- Java并发编程实战(使用synchronized实现同步方法)
本文介绍java最基本的同步方式,即使用synchronized关键字来控制一个方法的并发访问,如果一个对象已用synchronized关键字声明,那么只有一个执行线程允许去访问它,其它试图访问这个对 ...
- myeclipse中发送邮件出现Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
出现这个问题的原因是jar包版本不统一,解决方法如下: 我在项目导入了jar包 与myeclipse自带jar冲突了 删除Java EE 5 Libraries/javaee.jar/mail里的包有 ...
- Pathoto项目:AWS+golang+beego搭建
帮兄弟写了一个网站,由于要在国外使用,选择了AWS作为服务器. 不知道后面的价格如何,12个月免费的确吸引了我. 花费3天时间,从注册到服务器搭建访问,终于搞定了.下面记录一下其中容易出错的命令. 1 ...
- 前端Mvvm QC 上传了测试版
QC是一个前端MVVM框架,适合用来构建复杂的业务逻辑 项目地址:https://github.com/time-go/qc 技术支持QQ群:330603020 QC特点: 1.良好的浏览器兼容性(兼 ...
- HTML5+JS 《五子飞》游戏实现(四)夹一个和挑一对
在第一章我们已经说了怎么才能“夹一个”以及怎样才能挑一对,但那毕竟只是书面上的,对码农来讲,我们还是用代码讲解起来会更容易了解. 为了更容易对照分析,我们先把路线再次贴出来: // 可走的路线 thi ...
- Bootstrap系列 -- 1. 如何使用Bootstrap
一. Bootstrap 简介 Bootstrap 是一个前端框架,使用Bootstrap可以做出很多漂亮的页面,中文官网:http://www.bootcss.com/ 二. Bootstrap核心 ...
- /var/spool/clientmqueue 下生成太多文件处理
问题现象: linux操作系统中的/var/spool/clientmqueue/目录下存在大量文件. 原因分析: 系统中有用户开启了cron,而cron中执行的程序有输出内容,输出内容会以邮件形式发 ...
- android 开发之 百度地图的使用
好久没写博客了,最近遇到个新需求 需要用到百度地图的基础地图,定位,理论上应该还会用到鹰眼的功能吧.具体还很难说.我现在 刚动工,就从头开始记录吧. 首先是先申请一个百度地图api的key 流程官网很 ...
- [转]Spring——jar包详解
原文地址:http://my.oschina.net/huhaoren/blog/300856?p=1 spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了 spring ...
- 强联通 poj 2762
t个样例 (注意清零) n个点m条边 有向; 任意2点是否能从a->b或者b->a; Yes No #include<stdio.h> #include<algo ...