(转)C++ JsonCpp 使用(含源码下载)

2024-02-11 12:18
文章标签 c++ 源码 使用 下载 jsoncpp

本文主要是介绍(转)C++ JsonCpp 使用(含源码下载),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

https://www.cnblogs.com/ggjucheng/archive/2012/01/03/2311107.html

前言

JSON是一个轻量级的数据定义格式,比起XML易学易用,而扩展功能不比XML差多少,用之进行数据交换是一个很好的选择
JSON的全称为:JavaScript Object Notation ,顾名思义,JSON是用于标记javascript对象的,详情参考http://www.json.org/。
本文选择第三方库JsonCpp来解析json,JsonCpp是比较出名的c++解析库,在json官网也是首推的。

JsonCpp简介

JsonCpp主要包含三种类型的class:Value Reader Writer。
jsoncpp中所有对象、类名都在namespace json中,包含json.h即可。
注意: Json::Value只能处理ANSI类型的字符串,如果C++程序使用Unicode编码的,最好加一个Adapt类来适配。

下载和编译

本文运行环境是: Redhat 5.5 + g++version 4.6.1 +  GNU Make 3.81 + jsoncpp-0.5.0

下载地址是:http://sourceforge.net/projects/jsoncpp/

解压之后得到jsoncpp-src-0.5.0文件夹,我们只需要jsoncpp的头文件和cpp文件,其中jsonscpp的头文件位于jsoncpp-src-0.5.0\include\json,jsoncpp的cpp文件位于jsoncpp-src-0.5.0\src\lib_json。

这里我列出我们的工作目录:

复制代码

jsoncpp/           //工作目录
|-- include        //头文件根目录
|  |-- json       //json头文件,对应jsoncpp-src-0.5.0\include\json
|-- src            //cpp源码文件根目录|-- json       //jsoncpp源码文件,对应jsoncpp-src-0.5.0\src\lib_json|-- main.cpp   //我们的主函数,调用jsoncpp的示例代码  |-- makefile       //makefile,不用我们多说了吧,不懂请看我博客的makefile最佳实践

复制代码

 

反序列化Json对象

假设有一个json对象如下:

复制代码

{"name": "json″,"array": [{"cpp": "jsoncpp"},{"java": "jsoninjava"},{"php": "support"}]
}

复制代码

我们要实现这个json的反序列号代码如下:

复制代码

void readJson() {using namespace std;std::string strValue = "{\"name\":\"json\",\"array\":[{\"cpp\":\"jsoncpp\"},{\"java\":\"jsoninjava\"},{\"php\":\"support\"}]}";Json::Reader reader;Json::Value value;if (reader.parse(strValue, value)){   std::string out = value["name"].asString();std::cout << out << std::endl;const Json::Value arrayObj = value["array"];for (unsigned int i = 0; i < arrayObj.size(); i++){   if (!arrayObj[i].isMember("cpp")) continue;out = arrayObj[i]["cpp"].asString();std::cout << out;if (i != (arrayObj.size() - 1)) std::cout << std::endl;}   }   
}

复制代码

 

序列化Json对象

复制代码

void writeJson() {using namespace std;Json::Value root;Json::Value arrayObj;Json::Value item;item["cpp"] = "jsoncpp";item["java"] = "jsoninjava";item["php"] = "support";arrayObj.append(item);root["name"] = "json";root["array"] = arrayObj;root.toStyledString();std::string out = root.toStyledString();std::cout << out << std::endl;
}

复制代码

 

完整代码下载

点击此处下载

资源

下载之后,执行以下命令

unzip jsoncpp.zip
cd jsoncpp
make
./main

这篇关于(转)C++ JsonCpp 使用(含源码下载)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/699751

相关文章

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

Spring Boot3虚拟线程的使用步骤详解

《SpringBoot3虚拟线程的使用步骤详解》虚拟线程是Java19中引入的一个新特性,旨在通过简化线程管理来提升应用程序的并发性能,:本文主要介绍SpringBoot3虚拟线程的使用步骤,... 目录问题根源分析解决方案验证验证实验实验1:未启用keep-alive实验2:启用keep-alive扩展建

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

Python下载Pandas包的步骤

《Python下载Pandas包的步骤》:本文主要介绍Python下载Pandas包的步骤,在python中安装pandas库,我采取的方法是用PIP的方法在Python目标位置进行安装,本文给大... 目录安装步骤1、首先找到我们安装python的目录2、使用命令行到Python安装目录下3、我们回到Py