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. Web浏览器播放rtsp视频流详细解决方案

    1.背景 在当前项目中,需要实现Web端直接播放RTSP视频流.该功能的核心目标是使得用户能够通过浏览器观看来自不同品牌的IPC(Internet Protocol Camera)设备的实时视频流.主 ...

  2. Qt/C++音视频开发55-加密保存到文件并解密播放

    一.前言 为了保证视频文件的安全性,有时候需要对保存的视频文件加密,然后播放的时候解密出来再播放,只有加密解密的秘钥一致时才能正常播放,用ffmpeg做视频文件的加密保存和解密播放比较简单,基于ffm ...

  3. 如何使用图片的exif信息计算相机焦距

    135胶卷源于35mm高度的打孔电影胶片,1913年,德国人奥斯卡·巴纳克将其用于他发明的徕卡(Leica)牌小型照相机上,由此形成标准.35mm电影胶卷,35mm指的是胶卷的高度为35mm,由于上下 ...

  4. 【狂神说Java】Java零基础学习笔记-预科

    [狂神说Java]Java零基础学习笔记-预科 预科01:学习准备:博客 博客,英文名为Blog,它的正式名称为网络日记 为什么要写博客? 需要总结和思考.有时候我们一直在赶路,却忘了放慢脚步 提升文 ...

  5. 关于前端上传excell时间的问题

    当前端导入excell里的数据时,只能获取到下面类似的这种数据 Excel存储的日期是从1900年1月1日开始按天数来计算的,也就是说1900年1月1日在Excel中是1. 转化的思路和对Excel中 ...

  6. (十).NET6.0 搭建基于Quartz组件的定时调度任务

    1.添加Quartz定时器组件 2.新建类库项目Wsk.Core.QuartzNet,并且引用包类库项目.然后新建一个中间调度类,叫QuartzMiddleJob 3.新建一个Job工厂类,叫YsqJ ...

  7. C#遍历获取文件夹下所有文件

    1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Linq; 5 using ...

  8. MQ的定时任务改装,实现自定义定时:MQ+redis

    package com.*.server.live.listener; import com.*.common.core.entity.constant.LiveConstant; import co ...

  9. cmake-2

    似懂非懂,一定要搞懂基础的,剩下的边做边学,从案例中入手. 有关cmake的介绍,请参考: 1.https://www.cnblogs.com/pam-sh/p/13885959.html 2.htt ...

  10. Access pg walkthrough Intermediate window域渗透

    namp nmap -p- -A -sS -T4 192.168.200.187 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-23 00 ...