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的更多相关文章

  1. JsonCpp的简单使用方法

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript Programming Langu ...

  2. [计算机、网络相关历史]unix简史

    本文2001年由台湾“网络农夫”所写,其人生平不祥,此文受鸟哥大力推崇,两人应该相识.文章写得很不错,应该是查了很多资料整理而成的,美中不足的是好多语句不通顺,国考语文绝对不及格,哈哈. 0.我的准备 ...

  3. Hadoop、Pig、Hive、Storm、NOSQL 学习资源收集

    (一)hadoop 相关安装部署 1.hadoop在windows cygwin下的部署: http://lib.open-open.com/view/1333428291655 http://blo ...

  4. 课程四(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 ...

  5. jsoncpp 0.5 ARM移植

    1.下载jsonapp 0.5 https://github.com/open-source-parsers/jsoncpp 2.编译 platform 没有包含 arm 平台,需要把源码提取出来,独 ...

  6. Hadoop、Pig、Hive、NOSQL 学习资源收集

    转自:http://www.cnblogs.com/zzjhn/p/3855566.html (一)hadoop 相关安装部署 1.hadoop在windows cygwin下的部署: http:// ...

  7. XJCO1711 Procedural Programming

    University of Leeds School of ComputingProcedural Programming XJCO1711Semester 1, 2019-2020Coursewor ...

  8. 终极解决办法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 ...

  9. Linux实现树莓派3B的国密SM9算法交叉编译——(一)环境部署、简单测试与eclipse工程项目测试

    这篇文章主要介绍了交叉编译的实现,包括环境部署,并简单测试交叉编译环境是否安装成功. 一.交叉编译 在一个平台上生成另一个平台上的可执行代码.为什么要大费周折的进行交叉编译呢?一句话:不得已而为之.有 ...

随机推荐

  1. iptables案例手册

    Linux防火墙Iptable如何设置只允许某个ip访问80端口,只允许特定ip访问某端口 iptables常用实例备查(更新中) 9个常用iptables配置实例 案例: http://www.cn ...

  2. Windows 8的本地化应用程序清单

    I need to localize some data in application manifest (like name, description, splashscreen images et ...

  3. Java 基础【09】 日期类型

    java api中日期类型的继承关系 java.lang.Object --java.util.Date --java.sql.Date --java.sql.Time --java.sql.Time ...

  4. ASP.NT运行原理和页面生命周期详解及其应用

    ASP.NT运行原理和页面生命周期详解及其应用 1. 下面是我画的一张关于asp.net运行原理和页面生命周期的一张详解图.如果你对具体不太了解,请参照博客园其他帖子.在这里我主要讲解它的实际应用.  ...

  5. 浅析WPhone、Android的Back与Home键

    浅析WPhone.Android的Back与Home键 背景 本人一直在用诺基亚手机(目前是Nokia 925,Windows Phonre 8.1),在界面设计.应用多样性等方面没少受身边Andro ...

  6. Android开发自学笔记—1.1(番外)AndroidStudio常用功能介绍

    一.界面区介绍 1.项目组织结构区,用于浏览项目文件,默认Project以Android组织方式展示. 2.设计区,默认在打开布局文件时为设计模式,可直接拖动控件到界面上实现所见即所得,下方的Desi ...

  7. SqlServer——批量操作(批量添加,删除)

    批量添加数据: 一条insert语句批量插入多条记录 常见的insert语句,向数据库中,一条语句只能插入一条数据: insert into persons (id_p, lastname , fir ...

  8. Android开发之AutoCompleteTextView的简单使用

    这里只谈简单的使用: 代码xml: <AutoCompleteTextView android:id="@+id/actv" android:layout_width=&qu ...

  9. [转]史上最全最强SpringMVC详细示例实战教程

    原文:http://www.cnblogs.com/sunniest/p/4555801.html?utm_source=tuicool&utm_medium=referral SpringM ...

  10. mysql 定义自增

    The database returned no natively generated identity value问题 alter table user_table MODIFY user_id I ...