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工程项目测试
这篇文章主要介绍了交叉编译的实现,包括环境部署,并简单测试交叉编译环境是否安装成功. 一.交叉编译 在一个平台上生成另一个平台上的可执行代码.为什么要大费周折的进行交叉编译呢?一句话:不得已而为之.有 ...
随机推荐
- codevs http://www.codevs.cn/problem/?problemset_id=1 循环、递归、stl复习题
12.10高一练习题 1.要求: 这周回顾复习的内容是循环.递归.stl. 不要因为题目简单就放弃不做,现在就是练习基础. 2.练习题: (1)循环 题目解析与代码见随笔分类 NOI题库 htt ...
- 学习C++.Primer.Plus 7 函数
C++的返回值类型不能是数组 函数原型中的变量名相当于点位符,因此不要求提供变量名. void cheers(int); C++中不指定参数列表时就使用活力号: void saybye(...); 通 ...
- 如何在mac本上安装android sdk
众所周知的原因,google的很多网站在国内无法访问,苦逼了一堆天朝程序员,下是在mac本上折腾android 开发环境的过程: 一.先下载android sdk for mac 给二个靠谱的网址: ...
- [云上天气预报-有时有闪电]2月3日23:00-4:00阿里云SLB升级期间网络会闪断
大家好,2月3日23:00-2月4日4:00,阿里云将对SLB(负载均衡)进行升级,在升级期间,SLB会有约4-8次的网络闪断.由此给您带来麻烦,望谅解! 阿里云官方公告内容如下: 尊敬的用户: 您好 ...
- 从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值
具体的错误原因是:C#中的DateTime类型比SqlServer中的datetime范围大.SqlServer的datetime有效范围是1753年1月1日到9999年12月31日,如果超出这个范围 ...
- 【Javascript】好用的js弹层插件,layerUI
官网:layerUI 中文手册:layerAPI
- Java网络编程——TCP/UDP
UDP:面向无连接 ☆ 将数据及源地址和目的地址封装成数据包中 ☆ 每个数据报的大小限制在64K ☆ 不可靠协议 ☆ 不需要建立连接,速度快 TCP:面向有连接 ☆ 建立连接,形成传输数据的通道 ☆ ...
- Ubuntu14.04下安装tomcat
1.官方网站下载最新的tomcat:http://tomcat.apache.org/download-80.cgi在ubuntu上,我们下载zip和tar.gz.Ubuntu14.04安装和配置To ...
- ssh全屏退出的办法
在使用ssh的时候遇到,不知道碰到哪里了,突然xshell就全屏了 解决方法 按下键盘 Alt+Enter就好了
- [转]Eclipse工具使用技巧总结
首先推荐一篇非常好的How to use eclipse文章 ,讲的是eclipse使用的方方面面,非常实用,推荐给大家! 一.常用快捷键:Ctrl+F11 运行Ctrl+Shift+/ 在代码窗口中 ...