json-cpp 库使用

Json-cpp

是一个使用c++开发的面向对象的json库。

核心数据结构

Reader是json-cpp数据的读取器,可以从文件流,字符串中读取json数据,使用下面的接口:

boolparse( const std::string &document,

Value &root,

bool collectComments = true);

boolparse( std::istream &is,

Value &root,

bool collectComments = true);

将所有的json解析到Value结果里面。

Value是json解析的结果,它通过key-value的方式用来代表整数、浮点数、UTF-8的字符串、或者是一个value数组等,这个与json的格式定义保持一致。它的类型可以通过type获取,type的定义如下:

/*

* brief Type of the value held by a Value object.

*/

enum ValueType

{

nullValue = 0, ///< ‘null‘ value

intValue,      ///< signedinteger value

uintValue,     ///< unsignedinteger value

realValue,     ///< double value

stringValue,   ///< UTF-8string value

booleanValue,  ///< bool value

arrayValue,    ///< array value(ordered list)

objectValue    ///< objectvalue (collection of name/value pairs).

};

Value访问的常用接口:

const char *asCString() const;

std::string asString() const;

# ifdef JSON_USE_CPPTL

CppTL::ConstString asConstString() const;

# endif

Int asInt() const;

UInt asUInt() const;

Int64 asInt64() const;

UInt64 asUInt64() const;

LargestInt asLargestInt() const;

LargestUInt asLargestUInt() const;

float asFloat() const;

double asDouble() const;

bool asBool() const;

bool isNull() const;

bool isBool() const;

bool isInt() const;

bool isUInt() const;

bool isIntegral() const;

bool isDouble() const;

bool isNumeric() const;

bool isString() const;

bool isArray() const;

bool isObject() const;

/// Return true if the object has a member named key.

bool isMember( const char *key ) const;

/// Return true if the object has a member named key.

bool isMember( const std::string &key ) const;

# ifdef JSON_USE_CPPTL

/// Return true if the object has a member named key.

bool isMember( const CppTL::ConstString &key ) const;

# endif

/// \brief Return a list of the member names.

///

/// If null, return an empty list.

/// \pre type() is objectValue or nullValue

/// \post if type() was nullValue, it remains nullValue

Members getMemberNames() const;

使用方法

#include "json/json.h"

#include "iostream"

#include "string"

int main()

{

std::string strValue ="[{\"name\":\"TOM\",\"id\":4},{\"name\":\"JACK\",\"id\":5}]";

Json::Reader reader;

Json::Value value;

if(reader.parse(strValue, value))

{

if (value.type() != Json::arrayValue) {

printf("Json type is not arrayValue %d\n", value.type());

return 0;

}

for(unsigned int i = 0;i < value.size(); i++)

{

if (value[i].type() != Json::objectValue) {

printf("Json type is not objectValue %d\n", value[i].type());

continue;

}

if(!value[i].isMember("name"))

continue;

std::string name = value[i]["name"].asString();

std::cout << "got name " << name <<std::endl;

if(!value[i].isMember("id"))

continue;

int id = value[i]["id"].asInt();

std::cout << "got id" << id << std::endl;

Json::Value::Members member = value[i].getMemberNames();

for(Json::Value::Members::iterator iter = member.begin(); iter !=member.end(); ++iter)

{

std::cout << "gotmember " << (*iter) << std::endl;

}

}

}

return 0;

}

json-cpp 库使用

时间: 2024-10-21 13:56:56

json-cpp 库使用的相关文章

json解析库的使用

前言: 使用官方json.cpp解析库解析json文件 #include <json\json.h> #pragma comment(lib, "lib_json.lib") /************************/ /*json写操作*/ /************************/ void json_write_test() { Json::Value json_temp; json_temp["name"] = Json::V

VC 使用json静态库 问题解决

release使用 json 静态库 提示 fatal error C1083: 无法打开编译器生成的文件:“../../build/vs71/release/lib_json\json_writer.asm”: No such file or directory VC 使用json静态库 问题解决,布布扣,bubuko.com

c++ 使用json的库。cJSON

你看到的这个文章来自于http://www.cnblogs.com/ayanmw cJSON官网是:http://sourceforge.net/projects/cjson/?source=recommended 最新版本是2013年的,与2009年的变化不是很大. 看了代码,觉得挺好,只是是C语言的,不够好. 就改良了一下,内存自己管理.使用std::string http://files.cnblogs.com/ayanmw/cJSON_cpp_myversion.zip 使用起来如下:

转:Delphi语言最好的JSON代码库 mORMot学习笔记1

mORMot没有控件安装,直接添加到lib路径,工程中直接添加syncommons,syndb等到uses里 --------------------------------------------------------- 在进行网络编程中需要JSON对象的构建与解析,这个Delphi XE+自带:{$IF CompilerVersion>22}, System.JSon{$ELSE}, DBXJSON{$IFEND}不过,不好用,大家更喜欢SuperObject.我本人以前一直用JsonDa

fastjson是阿里巴巴的开源JSON解析库

fastjson的API十分简洁. String text = JSON.toJSONString(obj); //序列化 VO vo = JSON.parseObject("{...}", VO.class); //反序列化 https://github.com/alibaba/fastjson/wiki/Quick-Start-CN fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串

Delphi语言最好的JSON代码库 mORMot学习笔记1

在进行网络编程中需要JSON对象的构建与解析,这个Delphi XE+自带:{$IF CompilerVersion>22}, System.JSon{$ELSE}, DBXJSON{$IFEND}不过,不好用,大家更喜欢SuperObject.我本人以前一直用JsonDataObjects.今天要给大家介绍的这套JSON代码库算是“世外高人”,身怀绝世武功,而默默无闻,这就是 mORMot 系列开发框架.这是一个功能超级强大,学习曲线壁陡的开源框架. http://synopse.info/

Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例

Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的好用,今天我们为了博客的保质保量,也就不分开写,我们直接拿比较火的Gson和Fast-json来使用,末尾在进行一些分析 Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示 一.各有千秋 两大解析库的东家都是巨头,一个来自于Google官方,一个来自阿里巴巴,我们这

.Net Core下一次针对dpz2.Json和Newtonsoft.Json解析库的简单测试

关于dpz2.Json dpz2.Json是大胖子软件的自研Json解析库. 应用于更加简单的使用场景 在dpz2.Json诞生之前,我们一直使用的是Newtonsoft.Json解析库,Newtonsoft.Json最方便的地方是采用了类似JavaBean的绑定方式进行操作,但是实际操作时,我们可能更多时候只想要个解析器,好让我们能快速的辨别数据,这个时候,单纯的JavaBean方式又变得比较肘制,读取数据使用C#的动态类型确实可以比较方便的进行操作. 专注于直接操作 另外一个促使我们自研一个

Swifter.Json 可能是 .Net 平台迄今为止性能最佳的 Json 序列化库【开源】

Json 简介 Json (JavaScript Object Notation) 是一种轻量级的数据交换格式.它作为目前最欢迎的数据交换格式,也是各大开源贡献者的必争之地,如:阿里爸爸的 fastjson(java),腾讯的 rapidjson(c++) 等.但 .Net 却没有得到大厂的青睐,在 Swifter.Json 之前 .Net 的 Json 解析库都不完美. Swifter.Json 简介 Swifter.Json 是 .Net 平台上一个功能强大,简单易用,稳定及高性能的 Jso

c++ json cpp

一 编译链接 1 在相应官网下载jsoncpp 2 解压得到jsoncpp-src-0.5.0文件 3 打开jsoncpp-src-0.5.0 -> makefiles -> vs71 -> jsoncpp.sln 4 转换项目为VS2010格式 5 选择debug模式 6 在“解决方案资源管理器”中右击 lib_json 选择->仅用于项目 -> 仅生成lib_json 7 再次右击 lib_json 选择->仅用于项目 -> 仅链接lib_json 8 选择r