第一范文网 - 专业文章范例文档资料分享平台

jsoncpp详解

来源:用户分享 时间:2025/6/4 3:33:36 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

JSON详解

一、what is json

JSON(JavaScript Object Notation)跟xml一样也是一种数据交换格式,而Jsoncpp是个跨平台的开源库。

二、json的特性

JSON 数据的书写格式是:名称/值对。

名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:\。

JSON 值可以是:数字(整数或浮点数)、字符串(在双引号中)、逻辑值(true 或 false)、数组(在方括号中)、对象(在花括号中)、null。对象在json中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,...}的键值对的结构。数组在js中是中括号“[]”括起来的内容,数据结构为 [\java\。

三、JsonCpp的基本语法

使用JsonCpp前先来熟悉几个主要的类:

Json::Value 可以表示里所有的类型,比如int,string,object,array等,具体应用将会在后边示例中介绍。

Json::Reader 将json文件流或字符串解析到Json::Value, 主要函数有Parse。

Json::Writer 与Json::Reader相反,将Json::Value转化成字符串流,注意它的两个子类:Json::FastWriter和Json::StyleWriter,分别输出不带格式的json和带格式的json。 1、Value

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

可如下是用 Json::Value 类: Json::Value json_temp;

json_temp[\

json_temp[\

Json::Value root;

root[\

// 新建一个 Key(名为:key_string),赋予字符串值:\。 root[\

// 新建一个 Key(名为:key_number),赋予数值:12345。 root[\

// 新建一个 Key(名为:key_boolean),赋予bool值:false。 root[\

// 新建一个 Key(名为:key_double),赋予 double值:12.345。 root[\

// 新建一个 Key(名为:key_object),赋予json::Value 对象值。 root[\

// 新建一个 Key(名为:key_array),类型为数组,对第一个元素赋值为字符串:\。

root[\

// 为数组 key_array 赋值,对第二个元素赋值为:1234。 Json::ValueType type = root.type(); // 获得 root 的类型,此处为 objectValue 类型。

2、Writer

如上说了 Json::Value 的使用方式,现在到了该查看刚才赋值内容的时候了,查看 json 内容,使用 Writer 类即可。

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

顾名思义,用 Json::FastWriter 来处理 json 应该是最快的,下面我们来试试。 Json::FastWriter fast_writer;

std::cout << fast_writer.write(root) << std::endl; 输出结果为:

{\key_number\tring\

再次顾名思义,用 Json::StyledWriter 是格式化后的 json,下面我们来看看 Json::StyledWriter 是怎样格式化的。

Json::StyledWriter styled_writer;

std::cout << styled_writer.write(root) << std::endl; 输出结果为: {

\ \ \ \ \ \ \ },

\ }

3、Reader

Json::Reader 是用于读取的,说的确切点,是用于将字符串转换为 Json::Value 对象的,下面我们来看个简单的例子。

Json::Reader reader; Json::Value json_object;

const char* json_document = \ if (!reader.parse(json_document, json_object)) return 0;

std::cout << json_object[\ std::cout << json_object[\ 输出结果为:

\

四、JsonCpp的库文件分析

Value json结构体

Value类,json存放对象的结构体。它把所有的类型都集合在自己内部,而不再是union 。如果是普通的类型,如int、boot就直接赋值,给与变量类型。如果是字符串就使用duplicateStringValue新建字符串。如果是结构体、类,就使用new或者alloc*进行分配。

Value::Value( ValueType type )需要指定类型 switch ( type )… {

case uintValue:

value_.int_ = 0; …

}//通过标识表明是什么类型value。

value还能接受不同类型的变量的初始化: Value::Value( UInt value ) Value::Value( Int value ) Value::Value( Int64 value ) Value::Value( UInt64 value ) Value::Value( double value ) Value::Value( const char *value )

Value::Value( const char *beginValue, const char *endValue ) //字符串 Value::Value( const std::string &value ) Value::Value( const StaticString &value )

Value::Value( const CppTL::ConstString &value ) Value::Value( bool value )

Value::Value( const Value &other )通过类型type_来进行判断类型初始化

Value::operator[]操作符: ArrayIndex index类型:

如果没有定义使用自定义类型结构(默认使用map),则通过index找到名字CZString,然后在map里面寻找,如果有就返回,没有就新建一个。 如果是定义了,arrayValue类型,直接调用value_.array_->resolveReference( index );

Int index类型:

将index 转换成ArrayIndex(index),然后再次调用[]操作 。

const Value &

搜索更多关于: jsoncpp详解 的文档
jsoncpp详解.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c7alc047z3d6et871e29f_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top