VC下jsoncpp的使用入门_第1页
VC下jsoncpp的使用入门_第2页
VC下jsoncpp的使用入门_第3页
VC下jsoncpp的使用入门_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VC下jsoncpp的使用入门一、摘要JSON 的全称为:JavaScript Object Notation,顾名思义,JSON 是用于标记 Javascript 对象的,JSON 官方的解释为:JSON 是一种轻量级的数据传输格式。本文并不详细介绍 JSON 本身的细节,旨在讨论如何使用 C+ 语言来处理 JSON。关于 JSON 更具体的信息,可参见 JSON 官网:。二、jsoncpp 在 Windows 下的编译要使用第三方源码库,第一步少不了的就是编译,将源码文件编译成我们方便使用的动态链接库、静态链接库或者静态导入库1。jsconcpp 进行 JSON 解析的源码文件分布在 include/json、src/lib_json 下。其实 jsoncpp 源码并不多,为了方便产品管理,此处没必要将其编译为动态链接库或者静态导入库,所以我们选择使用静态链接库2。jsoncpp 已经处理的很完善了,所有编译选项都已经配置好,打开makefiles/vs71/jsoncpp.sln 便可以开始编译(默认是使用 VS2003 编译器的,打开时直接按照 VS2005 提示转换即可)。三、静态链接库的使用VC中使用静态库的方法#pragma comment(lib, “xxx.lib”)但在编译你应用程序时可能出现类似如下的错误1libcmtd.lib(invarg.obj):error LNK2005: _invoke_watson 已经在 MSVCRTD.lib(MSVCR90D.dll) 中定义1libcmtd.lib(dbgheap.obj) : error LNK2005: _CrtSetCheckCount 已经在 MSVCRTD.lib(MSVCR90D.dll) 中定义1libcmtd.lib(tidtable.obj) : error LNK2005: _encode_pointer 已经在 MSVCRTD.lib(MSVCR90D.dll) 中定义1libcmtd.lib(tidtable.obj) : error LNK2005: _decode_pointer 已经在 MSVCRTD.lib(MSVCR90D.dll) 中定义解决办法是在编译jsoncpp的lib时,选择动态运行时库具体含义如下开关 对应的库 版本 /MDMSVCPRT.LIB多线程DLL的Release版本/MDdMSVCPRTD.LIB多线程DLL的Debug版本/MTLIBCPMT.LIB多线程静态链接的Release版本/MTdLIBCPMTD.LIB多线程静态链接的Debug版本四、jsoncpp 使用详解jsoncpp 主要包含三种类型的 class:Value、Reader、Writer。jsoncpp 中所有对象、类名都在 namespace Json 中,包含 json.h 即可。Json:Value 只能处理 ANSI 类型的字符串,如果 C+ 程序是用 Unicode 编码的,最好加一个 Adapt 类来适配。1、ValueJson:Value 是jsoncpp 中最基本、最重要的类,用于表示各种类型的对象,jsoncpp 支持的对象类型可见 Json:ValueType 枚举值。可如下是用 Json:Value 类:Json:Value json_temp; / 临时对象,供如下代码使用json_tempname = Json:Value(“huchao”);json_tempage = Json:Value(26);Json:Value root; / 表示整个 json 对象rootkey_string = Json:Value(“value_string”); / 新建一个 Key(名为:key_string),/赋予字符串值:”value_string”rootkey_number = Json:Value(12345); / 新建一个 Key(名为:key_number),/赋予数值:12345。rootkey_boolean = Json:Value(false); / 新建一个 Key(名为:key_boolean),/赋予bool值:false。rootkey_double = Json:Value(12.345); / 新建一个 Key(名为:key_double),/赋予 double 值:12.345rootkey_object = Json_temp; / 新建一个 Key(名为:key_object),/赋予 json:Value 对象值。rootkey_array.append(“array_string”);/ 新建一个 Key(名为:key_array),/类型为数组,对第一个元素赋值为字符串:”array_string”rootkey_array.append(1234); / 为数组 key_array 赋值,对第二个元素赋值为:1234。Json:ValueType type = root.type();/ 获得 root 的类型,此处为 objectValue 类型。注:跟C+ 不同,JavaScript 数组可以为任意类型的值,所以 jsoncpp 也可以。如上几个用法已经可以满足绝大部分 json 应用了,当然 jsoncpp 还有一些其他同能,比如说设置注释、比较 json 大小、交换 json 对象等,都很容易使用,大家自己尝试吧。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_array”:array_string,1234,”key_boolean”:false,”key_double”:12.3450,”key_number”:12345,”key_object”:“age”:26,”name”:”huchao”,”key_string”:”value_string”再次顾名思义,用 Json:StyledWriter 是格式化后的 json,下面我们来看看 Json:StyledWriter 是怎样格式化的。Json:StyledWriter styled_writer;std:cout styled_writer.write(root) std:endl;输出结果为:“key_array” : array_string, 1234 ,“key_boolean” : false,“key_double” : 12.3450,“key_number” : 12345,“key_object” : “age” : 26,“name” : “大中华”,“key_string” : “value_string”3、ReaderJson:Reader 是用于读取的,说的确切点,是用于将字符串转换为 Json:Value 对象的,下面我们来看个简单的例子。Json:Reader reader;Json:Value json_object;const char* json_document = “”age” : 26,”name”

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论