Jsoncpp Compiler、Programming

时间:2022-09-04 17:58:01

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. &lbrack;计算机、网络相关历史&rsqb;unix简史

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

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

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

  4. 课程四&lpar;Convolutional Neural Networks&rpar;,第一周(Foundations of Convolutional Neural Networks) —— 3&period;Programming assignments:Convolutional Model&colon; application

    Convolutional Neural Networks: Application Welcome to Course 4's second assignment! In this notebook ...

  5. jsoncpp 0&period;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 &lpar;feature compiler&rpar; with license version &gt&semi;&equals; 3&period;1

    参考:https://blog.csdn.net/nic_r/article/details/7458038 ARM C/C++ Compiler, RVCT4. [Build ] armcc : e ...

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

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

随机推荐

  1. C&plus;&plus;学习笔记&lpar;3&rpar;

    本学习笔记是C++ primer plus(第六版)学习笔记.是C++学习笔记(2)的后续.复习C++基础知识的可以瞄瞄. 转载请注明出处http://www.cnblogs.com/zrtqsk/p ...

  2. CodeForces &num;363 div2 Vacations DP

    题目链接:C. Vacations 题意:现在有n天的假期,对于第i天有四种情况: 0  gym没开,contest没开 1  gym没开,contest开了 2 gym开了,contest没开 3 ...

  3. WordPress怎么在页面上添加目录

    要实现的如下功能,在页面上添加一个文章目录: 步骤:   1)在wordpress中,在Posts----Categories中建立目录, 2) 3)add new post,指定post所属的cat ...

  4. VS2008使用技巧及快捷键大全

    VS2008技巧,非常实用,非常提高效率. 1,Visual Studio 2008自带的1000多个 Windows 系统使用的各种图标.光标和动画文件在Visual Studio 2008的安装目 ...

  5. Spring Boot使用Druid和监控配置

    Spring Boot默认的数据源是:org.apache.tomcat.jdbc.pool.DataSource 整体步骤: (1)    --   Druid简单介绍,具体看官网: (2)     ...

  6. 解决nexus下载maven索引的问题

    解决nexus下载maven索引的问题 (2011-10-12 17:48:46) 转载▼ 标签: it 分类: java 转自 http://www.colorfuldays.org/program ...

  7. C&num;字符串和16进制转换

    public static string StrToHex(string mStr) //返回处理后的十六进制字符串 { return BitConverter.ToString( ASCIIEnco ...

  8. StringMVC(拦截器)

    单个拦截器 使用jar包 创建FirstController.java @Controller public class FirstController { @RequestMapping(&quot ...

  9. 【STM32】临界区进入退出宏 OS&lowbar;ENTER&lowbar;CRITICAL&lpar;&rpar; 和 OS&lowbar;EXIT&lowbar;CRITICAL&lpar;&rpar;

    宏函数展开为: #define OS_CRITICAL_METHOD 3 #if OS_CRITICAL_METHOD == 3 #define OS_ENTER_CRITICAL() {cpu_sr ...

  10. web界面直连MySql数据库

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...