全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年红河州辅警协警招聘考试备考题库及完整答案详解1套
- 2023年铁岭辅警招聘考试题库含答案详解(模拟题)
- 2023年甘肃辅警招聘考试题库含答案详解(满分必刷)
- 2023年辖县辅警协警招聘考试备考题库及答案详解(典优)
- 2023年鹤岗辅警招聘考试真题含答案详解(黄金题型)
- 平顶山工业职业技术学院《古籍装帧》2024-2025学年第一学期期末试卷
- 上海市普陀区市级名校2026届高二上生物期末监测模拟试题含解析
- 湖南省洞口县2025-2026学年高二生物第一学期期末质量跟踪监视模拟试题含解析
- 邯郸幼儿师范高等专科学校《建筑结构与抗震》2024-2025学年第一学期期末试卷
- 2025年广东省佛山市莘村中学高二上数学期末教学质量检测试题含解析
- 2025年“筑梦航天”青少年航天知识大赛题库(附答案)
- 聊城市东昌府区个体工商户开业登记申请书
- 宝钢质量一贯制管理办法
- 急诊中医适宜技术课件
- T/JSWP 03-2021事项类决策社会稳定风险评估规范
- T/CIQA 33-2022实验室气体输送系统技术规范
- 【《英雄联盟》IP开发分析综述3200字】
- 职业技术学校《烹饪原料学》课程标准
- 餐饮禁烟管理制度
- 机械设备安装施工技术措施总结
- 学校垃圾清运合同
评论
0/150
提交评论