Qt之JSON

简述

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。它基于 JavaScript Programming LanguageStandard ECMA-262 3rd Edition - December 1999 的一个子集。JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C 语言家族的习惯(包括:C/C++、C#、Java、JavaScript、Perl、Python 等),这些特性使 JSON 成为理想的数据交换语言。

  • 简述
  • JSON 结构
  • JSON 形式
  • Qt 对 JSON 的支持
  • 更多参考

JSON 结构

JSON 基于两种结构:

  • “key/value 对”的集合
    不同的语言中,它被理解为对象(object)、纪录(record)、结构(struct)、字典(dictionary)、哈希表(hash table)、有键列表(keyed list)、或者关联数组 (associative array)。
{ "Name": "Qt", "Company": "Digia", "From": 1991 }
  • 值的有序列表
    在大部分语言中,它被理解为数组(array)。
"Colors": ["green", "blue", "yellow"]

这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。

JSON 形式

JSON 具有以下这些形式:

  • 对象(object)
    是一个无序的“key/value 对”集合。一个对象以“{”(左花括号)开始,“}”(右花括号)结束。每个 key 后跟一个“:”(冒号);“key/value 对”之间使用“,”(逗号)分隔。

  • 数组(array)
    是值(value)的有序列表。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

  • 值(value)
    可以是双引号括起来的字符串、数值、true、false、 null、对象或者数组。这些结构可以嵌套。

  • 字符串(string)
    是由双引号包围的任意数量 Unicode 字符的集合,使用反斜线转义。一个字符即一个单独的字符串。

    字符串与 C 或者 Java 的字符串非常相似。

  • 数值(number)

    也与 C 或者 Java 的数值非常相似。除去未曾使用的八进制与十六进制格式。除去一些编码细节。

可以在 json.orgRFC-4627 中找到有关 JSON 数据格式的更多细节。

Qt 对 JSON 的支持

通过上述内容,我们对 JSON 有了详细的了解,在 Qt 使用过程中需要注意两点:

  • JSON 没有明确指定数字的有效范围,但 Qt 的支持仅限于 double 的有效范围和精度。
  • 对象(object)是“key/value 对”的集合,所有的 key 都是字符串,且不能重复 。

来看一个简单的 JSON 格式(包含:名称、公司、页面等):

{
    "Name": "Qt",
    "Company": "Digia",
    "From": 1991,
    "Page": {
        "Developers": "https://www.qt.io/developers/",
        "Download": "https://www.qt.io/download/",
        "Home": "https://www.qt.io/"
    },
    "Version": [
        4.8,
        5.2,
        5.7
    ]
}

上面示例,包含了一个拥有五个“key/value 对”的对象,values 中的两个(Company、Name)是字符串,一个(From)是数字,一个(Page)是对象,一个(Version)是数组。

一个有效的 JSON 文档要么是对象,要么是数组,所以 JSON 文档总由一对花括号({ … })或中括号([ … ])表示。

Qt 对 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 值

更多参考

时间: 2024-08-25 23:04:58

Qt之JSON的相关文章

Qt之JSON保存与读取

简述 许多游戏提供保存功能,使得玩家在游戏中的进度可以被保存,并在以后再玩的时候进行加载.保存游戏的过程通常涉及将每个游戏对象的成员变量序列化为文件.要实现这个功能,可以采取许多格式,其中之一就是 JSON - 使用 QJsonDocument.如果不希望保存的文件可读,或者不需要保持文件大小,还能够以二进制格式序列化文档,这就厉害了~O(∩_∩)O~. 下面,将演示如何以 JSON 和二进制格式来保存和加载一个简单的游戏. 简述 Character 类 Level 类 Game 类 使用 更多

Qt之JSON生成与解析

简述 Qt5 中包含了处理 JSON 的类,均以 QJson 开头(例如:QJsonDocument.QJsonArray.QJsonObject),在 QtCore 模块中,不需要额外引入其它模块. 简述 常用的 JSON 库 JSON 常用类 简单的 JSON 对象 简单的 JSON 数组 复杂的 JSON 更多参考 常用的 JSON 库 json.org 中介绍了 JSON 在各种语言中的应用,在 C/C++ 中比较常用的JSON 库主要有以下几个: JsonCpp JsonCpp 是一个

Qt中json文件加密问题

问题描述 Qt中json文件加密问题 正在写一个登录认证的程序(有一个登录框),个人并未采用C/S的基于数据库的认证过程,仅仅只是在本地通过读写文件来进行授权用户的认证以及添加等操作.个人希望用json文件来保存授权用户的信息(username,password),但是如果仅仅使用json文件,在使用时直接只读json文件就可以得到用户的密码,其安全性很低. 所以我现在有个问题:在Qt的json中,是否可以采取某种方式来对json文件进行加密处理,或者采取何种方式对password进行加密? 当

1.关于QT中json数据处理和密码md5加密

 新建一个Qt空项目 17Json.pro HEADERS += \     MyWidget.h   SOURCES += \     MyWidget.cpp   QT += widgets gui MyWidget.h #ifndef MYWIDGET_H #define MYWIDGET_H   #include <QWidget>   class MyWidget : public QWidget {     Q_OBJECT public:     explicit MyWid

《Qt 实战一二三》

简介 "我们来自Qt分享&&交流,我们来自Qt Quick分享&&交流",不管你是笑了,还是笑了,反正我们是认真的.我们就是要找寻一种Hold不住的状态,来开始每一天的点滴分享,我们是一个有激情,有态度的部队. 但是我们还是我们,我们只是多了一份责任.古语有云:"不积跬步无以至千里,不积小流无以成江海",所以每一个伟大事务的产生都不是一蹴而就的.现在我们要立足眼下,把第一站放在地球,"<Qt 实战一二三>&quo

qt报错Cannot find the androiddeploy Json file

问题描述 qt报错Cannot find the androiddeploy Json file 解决方案 http://www.cnblogs.com/rophie/p/3226543.html

Qt Creator介绍

简介 Qt Creator是使用Qt开发的IDE.Qt支持Windows.Linux/Unix.Mac OS X.Android.BlackBerry.QNX等多种平台,Qt Creator为不同平台提供了统一的开发环境. Qt Creator集成了Qt Designer.Qt Assistant.Help等工具.因此,在开发过程中可以很快的通过Designer来设计界面.如果想从Qt API中获得更详细的信息,只需要将光标定位到相应的类或函数并按下F1即可. 简介 欢迎模式 工程 示例 教程

Qt资料大全

简述 发福利了.发福利了.发福利了,重要的事情说三遍... 为了方便更多Qter了解.学习Qt,现将相关资源进行整理,主要内容包括:Qt官网.编码风格.GitHub & Third-Party.社区论坛.博客.书籍等. 满满的都是干货,独乐乐不如众乐乐... 简述 Qt官网 编码风格 GitHub Third-Party 社区论坛 博客 书籍 更多 Qt官网 Qt官网:https://www.qt.io Qt下载:http://www.qt.io/download Qt所有下载:http://d

【Qt编程】基于Qt的词典开发系列&amp;lt;四&amp;gt;--无边框窗口的缩放与拖动

        在现在,绝大多数软件都向着简洁,时尚发展.就拿有道的单词本和我做的单词本来说,绝大多数用户肯定喜欢我所做的单词本(就单单界面,关于颜色搭配和布局问题,大家就不要在意了).有道的单词本: 我所做的单词本:         很明显,两者的主要区别就是周围的边框问题.你可以对比QQ以前的版本和这几年的版本,就会发现都倾向于下面这种窗口模式.下面我们就说说如何用Qt实现无边框窗口的缩放与拖动.         对于无边框窗口的拖动其实很简单,其基本思想是,在鼠标移动前后记录鼠标的坐标,然