Qt解析JSON

文中图片来自菜鸟教程runnob

QT 解析json的三件套,QJsonDocument、QJsonObject、QJsonArray、QJsonValue

要搞清楚这几个东西,首先得搞清楚JSON得结构。
JSON主要是有几种格式:

JSON主要格式

  1. Object(对象)

    图片中即为JSON中对象的格式,他由一对花括号({})作为包围,对象可以包含很多键值对(Key-Value),每个键(Key)用引号(“”)括起来,键和值之间用冒号分隔(:),值(Value)可以是bool、数字、字符串、对象、数组或者null。键值对之间用逗号(,)分开。

    {
    "type":1,
    "msg":"Hello World!",
    "nullable":true,
    "member":["ZhangSan", "Lisi", "WangWu"],
    "info":{
    "name":"Zhangsan",
    "id":"1"
    }
    }

    这里就是一个键值对组成得对象。

  2. Array(数组)

    如图所示,数组是由一系列值(Value)得有序集合,值与值之间用逗号分开(,)

    [
    "a", 1, true, null,
    {
    "name":"1",
    "key":"123"
    },
    [1,2,3]
    ]

    如上所示,这里就是一个JSON数组。

QT的JSON处理类

从上面JSON的分析,就可以大概知道怎么在QT去解析一个JSON字符串了。

  1. QJsonObject

    这里就是JSON的对象,由键值对组成,也就是QString和QJsonValue组成

  2. QJsonArray

    这里是JSON的数组,由一系列的JSON的值(QJsonValue)组成

  3. QJsonValue

    JSON的值。可以是bool、数字、字符串、数组、对象

  4. QJsonDocument

    JSON文档。

例子解析

想要解析JSON你首先得把一系列的JSON字符串转换成实例化的QJsonDocument对象,然后才能调用QJsonObject或者QJsonArray进行解析。
例子解析分析:

// 以下皆用初始化好了的QJsonDocument
QJsonDocument m_document;
QFile jsonFile("testJson.json");
file.open(QIODevice::ReadOnly);
QByteArray jsonBa = file.readAll(); QJsonParseError error;
m_document = QJsonDocument::fromJson(jsonBa, &error);
jsonFile.close();
  1. 解析基本的数组

    ["ZhangSan","Lisi","WangWu"]

    解析步骤为:

    • 获取对应的QJsonArray数组
    • 用下标访问的方法,意义获取数组里的值QJsonValue
    • 输出值的内容

    代码实现如下:

    // 开始解析
    QJsonArray array;
    if (m_document.isArray()) {
    array = m_document.array();
    } for (int i = 0; i < array.size(); i++) {
    QJsonValue value = array.at(i);
    qDebug() << value.toString();
    }
  2. 解析基本的对象

    {
    "name":"Zhangsan",
    "id":"1"
    }

    解析步骤为:

    • 获取对应的QJsonObject对象
    • 获取对象里的所有键(QString)
    • 逐一输出键对应的值(QJsonValue)

    代码实现如下:

    // 开始解析
    QJsonObject object;
    if (m_document.isObject()) {
    object = m_document.object();
    } foreach (QString key, object.keys()) {
    qDebug() << object.value(key).toString();
    }
  3. 解析JSON数组组合JSON对象

    [
    {
    "name":"Zhangsan",
    "id":"1"
    }, {"name":"Lisi",
    "id":"2"
    }, {
    "name":"Wangwu",
    "id":"2"
    }
    ]

    解析步骤为:

    • 获取对应的QJsonArray数组
    • 用下标访问的方式来获取值(QJsonValue)
    • 如果其中一个值是对象(QJsonObject),就获取这个对象,然后按照对象的解析方法来解析。

    代码实现如下:

    QJsonArray array;
    if (m_document.isArray()) {
    array = m_document.array();
    } for (int i = 0; i < array.size(); i++) {
    if (array.at(i).isObject()) {
    QJsonObject object = array.at(i).toObject(); if (object.contains("name")) {
    qDebug() << object.value("name").toString();
    }
    }
    }
  4. 解析JSON对象组合JSON数组

    {
    "type":"1",
    "member":["Zhangsan", "Lisi", "Wangwu"]
    }

    解析步骤为:

    • 获取对应的JSON对象(QJsonObject)
    • 获取指定键对应的值(QJsonValue)
    • 如果这个值是一个数组(QJsonArray),按照数组的解析方式来解析

    代码实现如下:

    QJsonObject object;
    if (m_document.isObject()) {
    object = m_document.object();
    } if (object.contains("member")) {
    QJsonArray array = object.value("member").toArray();
    qDebug() << array[0].toString();
    qDebug() << array[1].toString();
    qDebug() << array[2].toString();
    }

Qt解析JSON的更多相关文章

  1. Qt解析Json数据

    1 JSON数据简介   JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范) ...

  2. QT使用QJson生成解析Json数据的方法

    QT中使用json还是比较方便的,下面用例子直接说明 举例子之前首先推荐一个在线解析json格式的网站,具体格式用法如下图所示: 之后根据这个格式进行json数据解析. QT使用json需要包含的头文 ...

  3. Qt之JSON生成与解析

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December ...

  4. 【转载】Qt之JSON生成与解析

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - December ...

  5. QT解析嵌套JSON表达式

    QT5开发环境集成了解析JSON表达式的库.使用很方便. 友情提示一下,好像在QT4环境里.须要到官网下载相关的库文件才干使用解析功能.话不多说,上代码 1.在pro文件里增加 QT += scrip ...

  6. Qt QJson解析json数据

    Qt QJson解析json数据 //加载根目录文件 void TeslaManageData::loadRootFolderFiles() { QNetworkAccessManager *mana ...

  7. 更好更快更高效解析JSON说明

    现在来一个实例解析类,直接就把解析JSON到QVariant去了.唯一不足的是没有搞错误处理,具体方法也请各位自行参考json-c的发行文档,这样比较方便叙述,STL或者Boost我都没有认真接触过, ...

  8. 使用QtScript库解析Json数组例子

    本文转载自:http://blog.sina.com.cn/s/blog_671732440100uwxh.html 使用qtscipt库解析json数组首先在工程文件中加 QT        += ...

  9. QJsonDocument实现Qt下JSON文档读写

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QJsonDocument实现Qt下JSON文档读写     本文地址:http://tech ...

  10. Qt读写Json

    Qt操作Json 1.QJsonDocument 1.详细说明 QJsonDocument类提供了读写JSON文档的方法. QJsonDocument是一个封装了完整JSON文档的类,可以从基于UTF ...

随机推荐

  1. Qt编写视频监控系统71-外网访问摄像头等设备(获取各种信息及拉流)

    一.前言 最近遇到个需求是通过外网接入摄像机或者NVR,通用的做法是将视频流推流到服务器,然后拉取rtmp视频流,这样就多了服务器的要求,而且实现的功能有限比如不能直接用onvif协议对设备获取信息和 ...

  2. Qt编写可视化大屏电子看板系统30-模块8物料管理

    一.前言 物料管理模块包括库存占比.主要零件库存状况子模块,其中库存占比采用自定义控件环形进度条展示,总共有多种库存,具体根据数据库中的名称展示不同的界面,当库存数不够的时候,对应环形进度条颜色红色显 ...

  3. 以大模型攻大模型之💫Jailbreaking Black Box Large Language Models in 🎢Twenty Queries

    "在高层次上,PAIR将两个黑盒LLMs--我们称之为攻击者和目标--相互对抗--"具体是如何对抗的?请各位看官仔细阅读~

  4. 由于OpenCV的#include <opencv2/opencv.hpp>文件没有放在所有的头文件之前所引起的编译时提示很多错误,如:filesystem.hpp(11,12): error C2144: 语法错误:“bool”的前面应有“;”error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int等

    现象描述: 由于OpenCV的#include <opencv2/opencv.hpp>文件没有放在所有的其他OpenCV头文件之前所引起的编译时提示很多错误,如:filesystem.h ...

  5. react之Lazy和Suspense(懒加载)

    React.lazy React.lazy 函数能让你像渲染常规组件一样处理动态引入(的组件). 什么意思呢? 其实就是懒加载. 其原理就是利用es6 import()函数.这个import不是imp ...

  6. WPF刮刮乐

    WPF刮刮乐 <Window x:Class="WpfApp2.MainWindow" xmlns="http://schemas.microsoft.com/wi ...

  7. w3cschool-Apache Kafka 教程

    参考https://www.w3cschool.cn/apache_kafka/ Apache Kafka 基础 2021-07-27 16:23 更新 对于大数据,我们要考虑的问题有很多,首先海量数 ...

  8. langchain-知识库问答

    本地接入 百川 langchain调用 参考:https://github.com/datawhalechina/self-llm/blob/master/BaiChuan/03-Baichuan2- ...

  9. 图解红黑树RBT

    rotation:

  10. 第8章 LINQ 查询

    第8章 LINQ 查询 8.2 流式语法 8.2.2 使用 Lambda 表达式 常用运算符 Where() 筛选器 Order() 排序器 Select() 映射器 Take() 获取前 x 个元素 ...