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

【STM32Cube HAL】输入捕获(六)——PWM测量

实验内容:使用通用定时器输入捕获测量信号的脉宽(检测按键按下的时间)。 一、原理图 二、 CubeMX配置 Step1.打开 STM32CubeMX,点击“New Project”,选择芯片型号,STM32F103VETx。 Step2.选择时钟源,并配置时钟树。选择Crystal/Ceramic Resonator,并配置系统时钟为72M。 Step3.配置SYS,我们这里选择的是Serial Wire。(正常情况配置不配置不影响,debug可以使用。但是你不可以把这...

HAHAHA 1万+

别再为跨页读写发愁了!STM32F407模拟I2C驱动24C256/512的避坑指南

本文详细解析了STM32F407模拟I2C驱动24C256/512的跨页写入问题,揭示了24C系列存储器'写满一页不会自动翻页'的关键机制,并提供了经过验证的分页写入算法和优化方案。通过GPIO时序优化、地址计算和错误处理等技巧,帮助开发者解决数据错乱、覆盖等常见问题,实现稳定可靠的EEPROM读写操作。

weixin_42631411的博客 377

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

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

hhw_hhw的博客 3359

全国充电站分布数据

CnOpenData推出的充电站数据覆盖全国34个省份的3万条数据,包含充电站名称、省份名称、省份代码、商圈、经纬度等地理信息以及商业类型、评分、消费等衍生信息,能为城市规划、环境科学、市场分析、技术发展和社会经济研究等多个领域提供宝贵的数据支持。

Sunny9qx的博客 4025

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

Kettle实战:如何用JavaScript脚本实现数据库表批量操作(附完整代码)

本文详细介绍了如何利用Kettle的JavaScript脚本实现数据库表批量操作,包括表名采集、循环遍历和动态SQL生成等关键步骤。通过实战案例和完整代码示例,帮助ETL工程师高效处理数据密集型任务,提升数据库操作的自动化水平。

weixin_29019241的博客 231

python blp模型 估计_随机系数Logit模型及Stata实现

欢迎投稿(荐稿)计量经济圈,计量相关都行邮箱:econometrics666@sina.cn作者:北京交通大学经济管理学院博士生,王琦珀。欢迎你加入计量经济圈社群,一起探讨前沿计量理论和实证方法。一、随机系数Logit模型1.背景实证产业组织(Empirical Industrial Organization,EIO)是目前产业组织理论的前沿,其中又以Ariel Pakes为带头人,其近期工作论文...

weixin_42298927的博客 2641

Qt中解析JSON文件

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

weixin_45144862的博客 778

set_data_check专题[使用,report_timing,setup/hold检查]

set_data_check用于约束『数据-对-数据』的『建立保持』时间检查,通常被称为非时序约束 ( non-sequential constraints ), 理论上set_data_check 可以设在任意的两个data pin 上,其中一个pin 称为 constrained pin 类似于寄存器的data pin, 另一个pin 称为related pin 类似于寄存器的clock pin.

cy413026的博客 1万+

Qt实现对json文件的解析

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

xx18030637774的博客 1084

【Windows Server 2019】活动目录 (Active Directory) ——理论

博文介绍了活动目录 (Active Directory) 的定义,作用以及与 DNS 的关系。同时也介绍了AD的组织结构,包括域控制器,子域,对象,属性,容器,组织单位,域间信任等术语的解释,实验拓扑图。

VMware, Windows, Linux, Cisco, Container, Kubernetes, Kali 7747

Apache DolphinScheduler 实现了对 OceanBase 的元数据库支持

Apache DolphinScheduler 是一款开源的分布式工作流任务调度系统,它提供了可视化的工作流设计和调度功能,支持大数据任务的自动化调度和监控。最近的更新中,Apache DolphinScheduler 引入了对 OceanBase 数据库的元数据库支持,这为用户在大数据环境中管理和调度任务提供了更多选择。用户可以通过 DolphinScheduler 提供的可视化界面进行工作流的设计和调度,也可以通过 DolphinScheduler 提供的 API 进行任务的编程调度。

VavzNvml的博客 495

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

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

m0_67401499的博客 9084

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

QT解析、修改json文件

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

FWY0x7CF的博客 1825

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值