1.Json 数据表示方式介绍

  这个可以看之前的一个文章里面有说明:Java解析(读取)Json数据

2.C++ Jsoncpp

2.1 Jsoncpp介绍

  (1)JsonCpp主要包含三种类型的class:Value Reader Writer;

    Json::Value 是jsoncpp 中最基本、最重要的类,用于表示各种类型的对象,jsoncpp 支持的对象类型可见 Json::ValueType 枚举值。

    Json::Reader 是用于读取的,说的确切点,是用于将字符串转换为 Json::Value 对象的。

    Json::Writer 类是一个纯虚类,并不能直接使用。在此我们使用 Json::Writer 的子类:Json::FastWriter、Json::StyledWriter、Json::StyledStreamWriter。

  (2)Jsoncpp中所有对象、类名都在namespace json中,包含json.h即可

2.2 Jsoncpp的下载与编译

  下载下来的jsoncpp必须要编译才能使用,在ubuntut上使用如下:

apt-get install scons
####下载jsoncpp-src-0.5..tar.gz######
tar -xvzf jsoncpp-src-0.5..tar.gz
cd jsoncpp-src-0.5.
scons platform=linux-gcc

  gcc版本是4.6的,上面的命令执行完后,会在jsoncpp-src-0.5.0/libs/linux-gcc-4.6目录下面生成库文件:

  (1)libjson_linux-gcc-4.6_libmt.a

  (2)libjson_linux-gcc-4.6_libmt.so

  之后,将动态链接库libjson_linux-gcc-4.6_libmt.so,添加到搜索路径中,参照:linux找不到动态链接库 .so文件的解决方法

3.Jsoncpp使用代码示例

3.1 程序解析json数据

解析下面的文件JsonText,文件如下:

{
"name": "json",
"array": [
"",
"",
""
]
}

代码(c.cpp):

 #include "json/json.h"
#include <string>
#include <stdlib.h>
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream is;
is.open ("JsonText", std::ios::binary );
Json::Reader reader;
Json::Value root;
if(reader.parse(is,root)) ///root保存整个Json对象的value
{
if(!root["name"].isNull())
{
cout<<root["name"].asString()<<endl; ///读取元素
Json::Value arrayObj = root["array"];
for(int i= ; i< arrayObj.size() ;i++)
{
cout<<arrayObj[i].asString()<<endl;
}
}
}
return ;
}

编译、链接、执行:

  g++ c.cpp -I ./include/ -L./libs/linux-gcc-4.6/ -ljson_linux-gcc-4.6_libmt -o C

  ./C

执行结果:

  json

  123

  456

  789

3.2 程序生成json数据

代码:

 #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); ///给arrayObj中添加元素(arrayObj变为数组)
arrayObj.append(i); ///给arrayObj中添加元素(arrayObj变为数组)
} root["key1"] = "value1"; ///给root中添加属性(arrayObj变为map)
root["key2"] = "value2";
root["array"] = arrayObj;
//root.toStyledString();
std::string out = root.toStyledString(); ///转换为json格式字符串
std::cout << out << std::endl;
return ;
}

编译、链接、执行:

  g++ b.cpp -I ./include/ -L./libs/linux-gcc-4.6/ -ljson_linux-gcc-4.6_libmt -o B

  ./B

执行结果:

{
"array" : [ , ],
"key1" : "value1",
"key2" : "value2"
}

部分参考:

http://www.cnblogs.com/logicbaby/archive/2011/07/03/2096794.html

http://www.softwareace.cn/?p=185

C++ Jsoncpp源代码编译与解析Json的更多相关文章

  1. C++ 解析Json——jsoncpp

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,和xml类似,本文主要对VS2008中使用Jsoncpp解析json的方法做一下记录.Jsoncpp是个跨 ...

  2. C++ 解析Json——jsoncpp(转)

    原文:https://www.cnblogs.com/liaocheng/p/4243731.html JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,和 ...

  3. C++解析JSON之JsonCPP

    一.JSON简介 JSON全称为JavaScript ObjectNotation,它是一种轻量级的数据交换格式,易于阅读.编写.解析. JSON由两种基本结构构成: )"名称/值" ...

  4. C++使用 jsoncpp 解析json数据

    整合自网路 一.安装的方法 1.安装 scons 下载地址:http://sourceforge.net/projects/scons/files/scons/2.1.0/scons-2.1.0.ta ...

  5. C++解析Json,使用JsonCpp读写Json数据

    JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.通常用于数据交换或存储. JsonCpp是一个基于C++语言的开源库,用于C++程序的J ...

  6. 更好更快更高效解析JSON说明

    现在来一个实例解析类,直接就把解析JSON到QVariant去了.唯一不足的是没有搞错误处理,具体方法也请各位自行参考json-c的发行文档,这样比较方便叙述,STL或者Boost我都没有认真接触过, ...

  7. jsoncpp用法通俗易懂之解析

    刚工作不久,最近遇到一个要解析一个web服务器发过来的json格式的文件,文件如下: { "global": { "renew": "true&quo ...

  8. TypeToken 是google提供的一个解析Json数据的类库中一个类

    Type listType = new TypeToken<LinkedList<User>>(){}.getType(); Type是java里的reflect包的Type ...

  9. C++构造和解析JSON

    JSON是一种轻量级的数据交互格式,易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率,实际项目中经常用到,相比xml有很多优点,问问度娘,优点一箩筐. 第三方库 json解析选用j ...

随机推荐

  1. 使用 Python 可以做什么?

    翻译自 <Python学习手册(第5版)> Systems Programming Python 对操作系统服务的内置接口使其非常适合编写可移植.可维护的系统管理工具和实用程序 utili ...

  2. CPU线程 和 Java线程

    一 cpu个数.核数.线程数的关系 cpu个数:是指物理上,也及硬件上的核心数: 核数:是逻辑上的,简单理解为逻辑上模拟出的核心数:一个CPU核心数模拟出2线程的CPU 线程数:是同一时刻设备能并行执 ...

  3. eclipse文本编码格式修改为UTF-8

    1.windows->Preferences...打开"首选项"对话框,左侧导航树,导航到general->Workspace,右 侧Text file encodin ...

  4. JAVA 获取分行符

    public static final String CR_LF = System.getProperty("os.name").startsWith("Windows& ...

  5. CodeDom生成类文件

    仅供个人学习 需要先引入System.CodeDom nuget包 using CodeGenerate.Entities; using System; using System.CodeDom; u ...

  6. Highmaps网页图表教程之图表配置项结构与商业授权

    Highmaps网页图表教程之图表配置项结构与商业授权 Highmaps图表配置项结构 Highmaps最核心的部分就是图表配置项.用户通过图表配置项来对标题进行定制,从而实现自己所要的效果.所以,掌 ...

  7. 移动端meta标签

    现在的手机或平板电脑等移动设备上的浏览器默认都有双击放大的设置,如何阻止双击放大?user-scalable=no <!-- 禁止缩放 --> <meta name=”viewpor ...

  8. #pragma region、{}

    定义一个region,这个region内部的代码你可以把它折叠起来是用于组织代码的,没有其他特别重要的意义. 而{}定义了作用域 { int a = 0; } { int a = 0; }

  9. wpf企业应用之数据校验

    wpf中使用IDataErrorInfo实现数据校验,绑定实体需要实现了此接口,并在UI绑定表达式中添加ValidatesOnDataErrors=True,这样数据校验发生时,wpf会调用该接口中的 ...

  10. [BZOJ 4809] 相逢是问候

    Link: 传送门 Solution: 以前没见过的套路题…… 1.使用EXT欧拉定理降幂的套路: $a^{x}=a^{xmod\phi(P)+\phi(P)} mod P$,且$x\ge P$ 这样 ...