00. 目录


文章目录


  • 00. 目录
  • 01. JSON简介
  • 02. JSON Support in Qt
  • 03. JSON类
  • 04. 附录


01. JSON简介

1.1 JSON概述

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集​。 JSON采用完全独立于语言的文本格式,使用了类C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。

JSON使用JavaScript语法来描述数据对象,但是JSON仍然独立于语言和平台。JSON解析器和JSON库支持许多不同的编程语言。

1.2 JSON语法

JSON语法是JavaScript对象表示法语法的子集,语法规则如下:


  • 数据在名称/值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

1.3 JSON键值对

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

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

"firstName" : "John"

1.4 JSON值类型


  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true或false)
  • 数组(在方括号中)
  • 对象(在花括号中)
  • null

1.5 JSON对象

JSON对象在花括号中书写:

对象可以包含多个名称/值对:

{ "firstName":"Jin" , "lastName":"Deng" }

1.6 JSON数组

JSON数组在方括号中书写:

数组可包含多个对象:

{
"people":[

{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},

{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},

{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}

]
}

02. JSON Support in Qt

2.1 Qt中JSON概述

Qt提供了处理JSON数据的支持。JSON是一种编码来自Javascript的对象数据的格式,但现在已广泛用作Internet上的数据交换格式。

Qt中的JSON支持提供了易于使用的C ++ API来解析,修改和保存JSON数据。它还支持以二进制格式保存此数据,该格式可以直接“ mmap”访问并且访问速度非常快。

有关JSON数据格式的更多详细信息,可以在json.org和RFC-4627中找到。

2.2 Qt中JSON类型

JSON是一种存储结构化数据的格式。它具有6种基本数据类型:


  • bool
  • double
  • string
  • array
  • object
  • null

值可以具有上述任何类型。布尔值由JSON中的true或false字符串表示。JSON并未明确指定数字的有效范围,但是Qt中的支持仅限于有效范围和双精度。字符串可以是任何有效的unicode字符串。数组是值的列表,而对象是键/值对的集合。对象中的所有键都是字符串,并且对象不能包含任何重复的键。

JSON的文本表示形式将数组括在方括号(​[…]​)中,将对象括在大括号(​{…}​)中。数组和对象中的条目以逗号分隔。对象中键和值之间的分隔符是冒号(​:​)。

简单的JSON例子如下:

{
"FirstName": "John",
"LastName": "Doe",
"Age": 43,
"Address": {
"Street": "Downing Street 10",
"City": "London",
"Country": "Great Britain"
},
"Phone numbers": [
"+44 1234567",
"+44 2345678"
]
}

上面的示例由一个具有5个键/值对的对象组成。其中两个值是字符串,一个是数字,一个是另一个对象,最后一个是数组。

有效的JSON文档是数组或对象,因此文档始终以​方括号​或​大括号​开头。

03. JSON类

QT4中使用第三方库QJson解析JSON文件。

QT5新增加了处理JSON的类,类均以QJson开头,包含在QtCore模块中。

QT5新增加如下七个相关类:

【Qt】Qt中JSON简介_Qt5

类名

描述

QJsonDocument

读写 JSON 文档

QJsonObject

封装 JSON 对象

QJsonObject::iterator

用于遍历QJsonObject的STL风格的非const遍历器

QJsonParseError

报告 JSON 处理过程中出现的错误

QJsonValue

封装 JSON 值

QJsonArray

封装 JSON 数组

04. 附录

4.1 JSON官方网站:http://json.org/

4.2 JsonCpp源码下载:https://github.com/open-source-parsers/jsoncpp