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. 《Android源码设计模式》--模板方法模式

    No1: 模板方法模式包括:抽象类(其中定义了一系列顺序方法).具体实现类A.具体实现类B 如果子类有实现不一样的细节,重写父类的某个方法即可 No2: AsyncTask对象调用execute方法后 ...

  2. MySQL Insert语句单个批次数量过多导致的CPU性能问题分析

    [问题] 最近有台服务器比较频繁的CPU报警,表现的特征有CPU sys占比偏高,大量慢查询,大量并发线程堆积.后面开发对insert的相关业务限流后,服务器性能恢复正常. [异常期间线程处理情况] ...

  3. 1265. [NOIP2012] 同余方程

    1265. [NOIP2012] 同余方程 ★☆   输入文件:mod.in   输出文件:mod.out   简单对比 时间限制:1 s   内存限制:128 MB [题目描述] 求关于 x 的同余 ...

  4. BZOJ3207 花神的嘲讽计划

    hash值建主席树. 垃圾题面没有熟虑范围害我MLE——>RE. By:大奕哥 #include<bits/stdc++.h> #define unll unsigned long ...

  5. luoguP1659 [国际集训队]拉拉队排练 manacher算法

    直接统计长度为$i$的回文子串有多少个 然后倒叙枚举长度,快速幂统计一下即可 复杂度$O(n \log n)$ #include <cstdio> #include <cstring ...

  6. Loj #6560 小奇取石子

    题面 分类讨论一波,n小的暴力2^n,n大的背包. #include<bits/stdc++.h> #define ll long long using namespace std; co ...

  7. [CSAcademy]Cycle Tree

    [CSAcademy]Cycle Tree 题目大意: 定义环树是一张无向连通的简单图,它的生成方式如下: \(2\)个点\(1\)条边的图是环树: 对任意一个环树,加入\(k\)个点\(a_{1\s ...

  8. python开发_thread_布朗运动

    这篇blog是非常有趣的,是的,他非常有趣 下面我将给大家介绍有关python中thread来实现布朗运动的一个例子 下面是运行效果: ================================ ...

  9. 读书笔记_Effective_C++_条款三十七:绝不重新定义继承而来的缺省参数值

    先看下面的例子: enum MyColor { RED, GREEN, BLUE, }; class Shape { public: ; }; class Rectangle: public Shap ...

  10. "Blessing of Dimisionality: High Dimensional Feature and Its Efficient Compression for Face Verification"学习笔记

    这\(^{[1]}\)是一篇关于如何使用高维度特征在人脸验证中的文章,作者以主要LBP为例子,论述了高维特征和验证性能存在着正相关的关系,即人脸维度越高,验证的准确度就越高.由于那时候没有用DeepL ...