VC下jsoncpp的使用入门.doc

上传人:PIYPING 文档编号:10737737 上传时间:2021-06-01 格式:DOC 页数:4 大小:75KB
返回 下载 相关 举报
VC下jsoncpp的使用入门.doc_第1页
第1页 / 共4页
VC下jsoncpp的使用入门.doc_第2页
第2页 / 共4页
VC下jsoncpp的使用入门.doc_第3页
第3页 / 共4页
VC下jsoncpp的使用入门.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《VC下jsoncpp的使用入门.doc》由会员分享,可在线阅读,更多相关《VC下jsoncpp的使用入门.doc(4页珍藏版)》请在三一文库上搜索。

1、VC下jsoncpp的使用入门一、摘要JSON 的全称为:JavaScript Object Notation,顾名思义,JSON 是用于标记 Javascript 对象的,JSON 官方的解释为:JSON 是一种轻量级的数据传输格式。本文并不详细介绍 JSON 本身的细节,旨在讨论如何使用 C+ 语言来处理 JSON。关于 JSON 更具体的信息,可参见 JSON 官网:http:/www.json.org。二、jsoncpp 在 Windows 下的编译要使用第三方源码库,第一步少不了的就是编译,将源码文件编译成我们方便使用的动态链接库、静态链接库或者静态导入库1。jsconcpp 进行

2、JSON 解析的源码文件分布在 include/json、src/lib_json 下。其实 jsoncpp 源码并不多,为了方便产品管理,此处没必要将其编译为动态链接库或者静态导入库,所以我们选择使用静态链接库2。jsoncpp 已经处理的很完善了,所有编译选项都已经配置好,打开makefiles/vs71/jsoncpp.sln 便可以开始编译(默认是使用 VS2003 编译器的,打开时直接按照 VS2005 提示转换即可)。三、静态链接库的使用VC中使用静态库的方法#pragma comment(lib, “xxx.lib”)但在编译你应用程序时可能出现类似如下的错误1libcmtd.l

3、ib(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

4、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 中所有对象、类名

5、都在 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:

6、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_doubl

7、e = 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。

8、Json:ValueType type = root.type();/ 获得 root 的类型,此处为 objectValue 类型。注:跟C+ 不同,JavaScript 数组可以为任意类型的值,所以 jsoncpp 也可以。如上几个用法已经可以满足绝大部分 json 应用了,当然 jsoncpp 还有一些其他同能,比如说设置注释、比较 json 大小、交换 json 对象等,都很容易使用,大家自己尝试吧。2、Writer如上说了 Json:Value 的使用方式,现在到了该查看刚才赋值内容的时候了,查看 json 内容,使用 Writer 类即可。Jsoncpp 的 Json:Writer

9、 类是一个纯虚类,并不能直接使用。在此我们使用 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_num

10、ber”: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”

11、: 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” : ”huchao”;if (!reader.parse(json_document, json_object)return 0;std:cout json_objectname std:endl;std:cout json_objectage std:endl;输出结果为:“大中华”26可见,上述代码已经解析出了 json 字符串。 4

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1