Qt如何解析Json文件

使用Qt读写JSON文件(二)——从文件解析JSON @TOC) 之前介绍了简单的示例,这次我们进行JSON文件的解析。 在你的桌面新建文件命名为test.json,内容填写如下: { "postsNum" : 2, "posts" : [ { "postID" : 10086, 阅读详情

        Qt中内置了一个QJsonDocument类用来处理json文件。并提供一些类来处理json。

类功能
QJsonArray封装 JSON数组
QJsonDocument读写 JSON 文档
QJsonObject封装 JSON 对象
QJsonObject::iterator用于遍历QJsonObject的 STL 风格的非 const 遍历器
QJsonParseError报告 JSON 处理过程中出现的错误
QJsonValue封装 JSON 值

读Json文件

        对于一个.json文件,首先通过file.readAll()读取为QString字符串,然后通过 .toUtf8()转为utf-8编码的QByteArray数据格式类型,再使用fromJson()函数转为QJsonDocument。为了验证这种转换的有效性,我们还可以使用isNull()来判断json是否转换成功。

static QJsonDocument readJson(QString path){
    QJsonDocument document;
    QFile file(path);
    file.open(QIODevice::ReadOnly | QIODevice::Text);
    if(!file.isOpen()){
        qDebug()<<path + "文件打开失败";
        return document;
    }
    QString value = file.readAll();
    file.close();
    QJsonParseError parseJsonErr;
    document = QJsonDocument::fromJson(value.toUtf8(),&parseJsonErr);
    if(parseJsonErr.error != QJsonParseError::NoError){
        qDebug()<<"json error:"<<parseJsonErr<<";error path:"<<path;
        return document;
    }
    return document;
}

        通过以上步骤将.json文件转为了QJsonDocument文件,接下来需要做的就是对QJsonDocument进行处理 。比如我们可以先调用isArray()或isObject()函数判断这个document是一个 json对象还是一个json数组,然后调用对应的toObject()或toArray()函数转换得到QJsonObject或者QJsonArray类。每一个JsonObject都是一个键值对,具体的Qt帮助里面可以查找对应的操作函数来处理,当然,JsonObject的值QJsonValue也可能是数组或者一个新的JsonObject对象,然后就再继续进行判断判断类型即可。这里的QJsonValue是封装的json的键值对的值,可以通过对应的toBool(),toInt(),toDouble(),toArray()转换为对应的类型。

写Json文件

        对于写入Json文件,同样,我们可以使用toJson函数将QJsonDocument写入到.json文件中。

static bool writeJson(const QJsonDocument &document, const QString &path){
    QFile file(path);
    file.open(QIODevice::WriteOnly | QIODevice::Text);
    if(!file.isOpen()){
        qDebug()<<path<<"文件打开失败";
        return false;
    }
    file.write(document.toJson(QJsonDocument::Indented));
    file.close();
    return true;
}
toJson()函数第二个参数
ConstantValueDescription
QJsonDocument::Indented0数据多行显示
QJsonDocument::Compact1数据单行显示,没有回车换行

        既然可以将QJsonDocument写入到 文件中了,那么接下来考虑如何构造QJsonDocument文件。同样,我们可以新建一个QJsonObject对象,然后QJsonDocument对象为新建的QJsonObject。

QJsonObject mainjson;
QJsonDocument endJsonDoc;
endJsonDoc.setObject(mainjson);
filejson.write(endJsonDoc.toJson(QJsonDocument::Indented));

        上面的操作可以生成一个json文件,不过是空文件,对于QJsonObject,我们可以使用insert等函数进行插入键值对。这里的insert第一个参数是键名,第二个是值,这里的值可以是QString字符串,也可以是新的QJsonObject,还可以是QJsonArray数组。然后插入的值的QJsonObject也可以插入自己的键值对。对于QJsonArray对象可以通过append()函数来添加JsonObject到JsonArray中。

QString path = "C:/Users/adminstrator/Desktop/test.json";
QFile file(path);
QJsonDocument endJsonDoc;
QJsonArray jsonArray;
QJsonObject jsonObject1;
QJsonObject jsonObject2;
QJsonObject mainJson;
jsonObject1.insert("name","jack");
jsonObject1.insert("age",24);
jsonObject2.insert("name","Tom");
jsonObject2.insert("age",23);
jsonArray.append(jsonObject1);
jsonArray.append(jsonObject2);
mainJson.insert("student",jsonArray);
endJsonDoc.setObject(mainJson);
file.open(QIODevice::WriteOnly | QIODevice::Text);
if(!file.isOpen()){
    qDebug()<<path<<"文件打开失败";
}
file.write(endJsonDoc.toJson(QJsonDocument::Indented));
file.close();

        上面代码放到QtCreater新建构造函数中运行在桌面生成test.json,打开如下图:

 

 

Qt多级解析Json文件 Qt多级解析Json文件Json文件范本我要从下面的文件中解析Cmd1中的Name中的值{ "CommandFamily": { "Name": "自定义指令集", "Cmd1": { "Name": "07", "Value": "hello world" }, "Cmd2": 阅读详情

相关推荐

Qt 解析JSON文件,在tableWidget上显示;保存tableWidget内容为JSON格式

例如有如下某JSON文件app.json。app是一个数组,包含三个应用程序.exe,args是启动参数。 { "app": [ { "name": "Ink", "path": "E:\\Ink.exe", "args": "" }, { "name": "Mes", "path": "E:\\Mes.exe", "args": "m1" }, { "name": "Pri"

zong521777的博客 2815

Qt--解析Json

QT4中使用第三方库QJson解析JSON文件。QT5新增加了处理JSON的类,类均以QJson开头,包含在QtCore模块中。QT5新增加六个相关类:QJsonArray封装 JSON 数组读写 JSON 文档封装 JSON 对象用于遍历QJsonObject的STL风格的非const遍历器报告 JSON 处理过程中出现的错误QJsonValue封装 JSON 值QJsonDocument提供了读写Json文档的方法。

hw5230的博客 6417

QT JSON数据格式讲解

本篇文章开始带大家学习一下什么是JSON,并且学习QT当中的JSON使用。本篇文章就讲解到这里,希望大家学习后可以自己进行实验验证。

m0_49476241的博客 2384

【Qt】Json解析

它是一种轻量级的、开放的、易于阅读和理解的数据格式,适用于广泛的应用场景。正是由于Json格式的数据的常用性,所以很多时候我们使用Qt框架来写程序是绕不开它的。而Qt自然也有专门的类用来读写Json格式的数据。

卡钦斯基的博客 4292

Qt json解析

目录JSON解析对象解析数组解析数组对象混合解析对象数组混合解析Qt中内置了一个QJsonDocument类用来处理json文件,以及json字符串。解析JSON是一种存储结构化数据的格式。它有6种基本数据类型:bool、double、string、array、object、null测试数据 Qt json解析对象 代码 运行结果 数组解析 测试数据 Qt json解析数组代码 运行结果 数组对象混合解析 测试数据 Qt json解析代码 运行结果 对象数组混合解析

啊渊的专栏 4645

Qt Json解析详解

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

程序猿老樊的博客 926

Qt5.9解析json文件详细用法示例

本文主要总结用Qt自带的类QFile、QJsonDocument、QJsonParseError、QJsonObject、QJsonArray、QJsonValue来解析已经写好的json文件。其中,json文件的创建可以直接新建一个txt文本,然后将其后缀改为*.json文件就行。如果要用Qt程序自动创建,可以参考这篇博客:https://blog.youkuaiyun.com/li491093957/ar...

净无邪博客 3万+

QT5中的JSON文件解析示例教程

本文还有配套的精品资源,点击获取 简介:QT5是一个功能丰富的Qt开发框架版本,其中包含了解析JSON文件的API。JSON是一种广泛用于数据交换的轻量级格式。本文将指导你如何在QT5中利用QJsonDocument、QJsonObject、QJsonArray等类来读取和解析JSON文件。通过提供的示例代码,你将学习到如何读取文件、解析JSON数据,以及如何处理JSON对...

weixin_42627459的博客 2152

QT解析json文件

读取文件 #include<QFile> QString filename(“3.json”); 打开文件 先判定文件是否存在,在打开文件(是否正确打开) if (!filename.exists()) { qDebug() << "file doesnt exist"; return -1; } if (!filename.open(QIODevice::ReadOnly)) { qDebug() << "some error when read t

qq_26189301的博客 2292

电源完整性之仿真设计原理

电源完整性(Power Integrity),简称为PI,也就是大家平常听说的PI。PCB板上的电源设计也是非常重要的,不当的设计也会引起很重要的影响。所以电源完整性PI和信号完整性SI,是我们互连设计人员应该同等重视的问题。今天整理本人接触的电源完整性PI的一些原理,从不的角度去看PI,会有不同的理解,下面开始喽!!! 提到互连的电源设计,可能首先想到的电源分配网络(Power Distribution Nets),因为互连电源会有许多种,直流DC和交流AC,还有不同的电压调节模块(VRM)与不同的负载端

刘小同学的博客 7373

13 万字 C 语言从入门到精通保姆级教程2021 年版

13 万字C语言保姆级教程,从入门到精通。

李南江 61万+

【QT 读取JSON】 深入浅出 使用QT内置的QJson模块解析Json文件 匠心之作

这一篇文章,比其他QT读取Json数据的文章都要写的透彻

hhw_hhw的博客 3359

【亲测好用】解决Windows系统Vscode终端无法使用yarn报错无法加载文件

我明明使用`npm i -g yarn ` 安装成功了 甚至在文件夹处 CMD 也可以看到yarn 的版本 甚至在Vscode中又重新安装了一遍yarn 为什么还是报错呢?

Aeporn的博客 888

qt5 html解析json,QT5 解析JSON文件

QT读JSON文件步骤,这里把过程记录一下,网上大多都是怎么写json的,对于读的,记录的不多首先JSON文件格式必须为UTF-8(非UTF-8 with BOM),UTF-8 with BOM 即为UTF-8 前加了BOM标识,会导致解析失败,报错内容非法,这时候就将文件保存为UTF-8就好了。QT5 解析JSON需要引入头文件#include #include #include 从文件读入文本...

weixin_39573287的博客 236

在MacBook M1/M2上,手把手教你打包包含嵌入模型的RagFlow Docker镜像(避坑指南)

本文详细指导如何在MacBook M1/M2上构建ARM64架构的RagFlow Docker镜像,涵盖环境准备、依赖处理、镜像构建及性能优化全流程。特别针对Apple Silicon芯片的兼容性问题提供解决方案,帮助开发者高效完成本地开发环境搭建。

weixin_26908317的博客 242

华为OD机试 - 天然蓄水库(Java 2025 A卷 100分)

例如,当山脉为s = [3, 1, 2]时,则选取s[0]和s[2]作为水库边界,则蓄水量为1,此时输出:0 2:1。选取下标 0(高度 3)与 2(高度 2)为边界,水位为 min(3,2)=2;选取山脉上两个点作为蓄水库的边界,则边界内的区域可以蓄水,蓄水量需排除山脉占用的空间。经过分析,选取s[1]和s[6]时,水库蓄水量为19(3 + 7 + 4 + 5)。当存在合理的水库边界时,输出左边界、空格、右边界、英文冒号、蓄水量;当山脉`s = [3, 2, 1]时,不存在合理的边界,此时输出:0。

学Java,找哪吒 938

Qt中解析JSON文件

在Qt中解析JSON字符串主要有两种方式:使用类或使用结合QVariant。

weixin_45144862的博客 778

数据结构课程设计C/C++版--美团餐馆预定信息的管理与分析 5 6

第5关:注销个人信息。

m0_62222486的博客 2124

Qt实现对json文件的解析

json是一种轻量级的数据结构,其内部的结构是一种键值对(key-value)的组合,最外层是{ }。key是带双引号的字符串常亮,用于获取和存储;value的值可以是bool变量,字符串常量,对象或数组(也是一个key-value的组合,以 [ 开头,以 ] 结尾),具体json格式介绍可参考博客:https://www.cnblogs.com/hwtblog/p/8483573....

xx18030637774的博客 1084

【华为OD机试真题 新系统】1043、魔法咒语组合 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

【华为OD机试真题 新系统】1043、魔法咒语组合 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2026e卷,od机试,2026E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2026华为od,如何备战华为od

KJ.JK 281

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Qt 操作Json格式文件(创建、插入、解析、修改、删除)

花了几天时间研究Qt如何操作Json文件,也是有一点心得,现在记录下来分享! 为什么要学习Json呢?Json是一个轻量级数据存储文件,其里面使用了大量的字符进行存储数据。JSON 是存储和交换文本信息的语法,类似 XML。JSON 比 XML 更小、更快,更易解析。 JSON 是一种编码来自 Javascript 的对象数据的格式,但现在已广泛用作互联网上的数据交换格式。 Qt 中的 JSON 支持提供了易于使用的C++ API 来解析、修改和保存 JSON 数据。 当然,我学习Json,主要是因为我的上

m0_67401499的博客 9084

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Qt解析Json文件

参考文献:使用Qt读写JSON文件(二)——从文件解析JSON 代码实现如下: #include<QDir> #include<QFile> #include<QJsonArray> #include<QJsonDocument> #include<QJsonObject> #include<QJsonParseError> #include<QJsonValue> #include<QSysInfo> #inc

weixin_43638873的博客 396

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

QT解析、修改json文件

QJsonArray【】的内容有顺序,按QJsonArray::at(int i).value()找值;QJsonObject{}没顺序,按键找值QJsonObject ::value("键");2.获取节点修改内容。

FWY0x7CF的博客 1825
上一篇: MFC中操作Word文档
下一篇: Qt中使用OpenCV(包含Contrib)环境搭建
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值