在 Qt 中支持 JSON

Qt 对处理 JSON 数据提供支持。JSON 是派生自 JavaScript 的对象数据编码格式,但现被广泛用作 Internet 数据交换格式。

Qt 中的 JSON 支持提供易于使用的 C++ API 去剖析、修改和保存 JSON 数据。它还包含对可直接 mmap 且能非常快速访问,以二进制格式保存数据的支持。

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

概述

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

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

值可以是任何以上类型。bool 值在 JSON 中由字符串 true (或 false) 表示。JSON 未明确指定数字的有效范围,但在 Qt 中支持被限制到有效范围和 double (双) 精度。string 可以是任何有效的 unicode 字符串。array (数组) 是值的列表,而 object (对象) 是键/值对的集合。对象中的所有键都是字符串,且对象不能包含任何重复键。

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 文档是数组 (或对象),因此文档始终以方括号 (或花括号) 开头。

JSON 类

所有 JSON 类都是基于值的, 隐式共享类 .

Qt 中的 JSON 支持由这些类组成:

另请参阅 JSON 保存游戏范例 .

QJsonArray

封装 JSON 数组

QJsonDocument

读写 JSON 文档的办法

QJsonObject

封装 JSON 对象

QJsonObject::const_iterator

QJsonObject::const_iterator 类为 QJsonObject 提供 STL 样式的常量迭代器

QJsonObject::iterator

QJsonObject::iterator 类为 QJsonObject 提供 STL 样式的非常量迭代器

QJsonParseError

用于在 JSON 剖析期间报告错误

QJsonValue

把值封装在 JSON 中