logo资料库

史上最详尽的JsonCpp使用指南(含c++封装的源代码).docx

第1页 / 共36页
第2页 / 共36页
第3页 / 共36页
第4页 / 共36页
第5页 / 共36页
第6页 / 共36页
第7页 / 共36页
第8页 / 共36页
资料共36页,剩余部分请下载后查看
2.1、JSON数据格式
2.2、JSON 语法
2.2.1、JSON 名称/值对
2.2.2、JSON 值
2.2.3、JSON 对象
2.2.4、JSON 数组
2.3、jsoncpp库简介
2.3.1、编译jsoncpp静态链接库
2.4、使用生成的静态链接库
2.4.1、将静态库设置为工程链接器输入的附件依赖项
2.4.1、拷贝头文件到工程中
2.5、jsoncpp中的类
2.5.1、Value类
2.5.1.1、Value的数据结构
2.5.1.2、Value类的构造函数
2.5.1.3、Value类的操作符重载
2.5.1.4、value的类型判断函数
2.5.1.5、value的;类型转换函数
2.5.1.6、Value的数组操作函数
2.5.1.7、Value的json字符串转换函数
2.5.2、Writer类
2.5.2.1、Writer类概述
2.5.2.1、Write函数
2.5.3、Reader类
2.5.3.1、Reader类的构造函数
2.5.3.2、json字符串解析函数
2.6、利用jsoncpp将对象转换为json字符串
2.6.1、转换的基本思想
2.6.2、JsonBase
2.6.3、Course类
2.6.4、Student类
2.6.5、测试代码
2.7、使用jsoncpp利用json字符串给对象赋值
2.7.1、基本思想
2.7.2、Course中转换的实现
2.7.3、Student中转换的实现
2.7.4、测试
第二讲c++JSON 数据解析 2.1、JSON 数据格式 数 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于 JavaScript (Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON 采用完全独立于 语言的文本格式,但是也使用了类似于 C 语言家族的习惯(包括 C, C++, C#, Java, JavaScript, Perl, Python 等)。这些特性使 JSON 成为理想的数据交换语言。易于人阅读和编写,同 时也易于机器解析和生成。 2.2、JSON 语法 JSON 语法是 JavaScript 对象表示法语法的子集。  数据在名称/值对中  数据由逗号分隔  花括号保存对象  方括号保存数组 2.2.1、JSON 名称/值对 JSON 数据的书写格式是:名称/值对。 名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值: "firstName" : "John" 这很容易理解,等价于这条 JavaScript 语句: firstName = "John" 2.2.2、JSON 值 JSON 值可以是:    数字(整数或浮点数) 字符串(在双引号中) 逻辑值(true 或 false) 1
   数组(在方括号中) 对象(在花括号中) null 2.2.3、JSON 对象 JSON 对象在花括号中书写: 对象可以包含多个名称/值对: { "firstName":"John" , "lastName":"Doe" } 这一点也容易理解,与这条 JavaScript 语句等价: firstName = "John" lastName = "Doe" 2.2.4、JSON 数组 JSON 数组在方括号中书写: 数组可包含多个对象: { "employees": [ { "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName":"Jones" } ] } 在上面的例子中,对象 "employees" 是包含三个对象的数组。每个对象代表一条关于某人(有姓和名)的记录。 2.3、jsoncpp 库简介 Jsoncpp 是 C++中用于构成和解析 JSON 的第三方库。下载地址为:三 http://sourceforge.net/projects/jsoncpp (本文使用的 jsoncpp 版本为:0.5.0)。使用 jsoncpp 需要在 vs 中进行编译。需要根据不同的 vs 版本编译成不同的 jsoncpp 库。 2
编译完成后,将 json.h 头文件导入到工程中,然后将相应的 jsoncpp 库文件拷贝到 vs 的工程目录下。在项目中导入 jsoncpp 的静态链接库即可使用 jsoncpp 了。 2.3.1、编译 jsoncpp 静态链接库 Jsoncpp 需要编译两个版本,一个是 debug 调试版,以便在程序调试时使用。一个 个时 release 版,以便于程序发布时使用。 1、jsoncpp0.50 项目结构 1) 目录结构 jsoncpp0.50 的目录包括:  Build 目录,包括 debug 和 release 两个子目录。最终生成的库文件保存到 此目录中。Build/vs71/debug/lib_json 下存储着调试版的静态链接库,如 图: 3
Build/vs71/release/lib_json:下存储着编译好的发行版的静态链接库库 文件。如图:  Include 目录,存放头文件。  Makefiles 目录,存放编译所需的文件  Src 存放源文件,其中包含了三个项目的文件夹。 2) 工程结构 jsoncpp0.50 项目包括三个工程。进入上述目录结构的 makefiles/vs71 目录下。如下图所 示: 4
双击该文件,在 vs 中打开 jsoncpp0.50 项目。如图: 要生成静态链接库,我们只需要使用第二个工程(lib_json)即可。 2、 编译生成静态链接库 编译器属性设置,需要打开 lib_json 工程的属性,步骤如下图所示: 5
1) 编译器设置 在编译静态链接库之前需要对编译环境进行设置。  配置生成库 Lib_json 项目和使用 lib_json 项目生成的静态链接库的项目在编译时都会依赖 于生成库。生成库有多线程调试版静态生成库、多线程发行版静态生成库、多 线程调试版动态生成库、多线程发行版动态生成库。 Lib_json 项目生成后,需要生成调试版和发行版两个版本的静态库文件。配置 生成库的目的是:将 lib_json 项目和使用 lib_json 项目生成的静态库文件的项目 的生成库设置为一样的库。 生成库配置选项如下图所示: 6
生成库有四种:静态库发行版(release)MT(Multi-thread)、静态库调试 版(debug)MTD(multi-thread debug)、动态库发行版(release)MD(multi_dll), 动态库调试版 MDd(multi-dll debug)。 一般情况下,MFC 工程中都使用多线程 DLL 或多线程调试 DLL。一般我们 不需要设置,在 vs 中我们可以设置是生成发行版还是调试版,一般在程序设计 期间,我们需要设置断点来调试程序,所以在编译生成代码时将工程设置为调 试版本。而交付给用户时,需要将编译生成的代码设置为发行版。如下图所示: 设置以后,生成库会自动切换为调试版或发行版的静态库或动态库。 我们在生成自己的库文件时,将 jsoncpp0.50 工程的生成库设置为与我们使用 jsoncpp0.50 静态库工程的生成库设置为一致。  配置依赖库 工程生成时会依赖很多默认库。在 jsoncpp0.50 生成的静态库中不要包含这些默 认库。否则在使用 jsoncpp0.50 静态库的工程中会出现很多重复定义的错误。如 下: 错误 1 error LNK2005: _free 已经在 libcmtd.lib(dbgheap.obj) 中定义 MSVCRT.lib 错误 2 error LNK2005: _malloc 已经在 libcmtd.lib(dbgheap.obj) 中定义 7
MSVCRT.lib 因此,我们在设置方式如下: 选择“忽略所有默认库”  配置汇编程序输出 必须将静态链接库的汇编程序输出的输出文件设置为“无列表”。否则在编译 使用静态库的工程时会出现:“json_value.asm 文件或路径不存在”的错误。 设置如下图所示: 8
分享到:
收藏