50.Qt-QJsonDocument读写json
- QJsonDocument: 提供一种读取和写入JSON文档的方法,可以通过它的的成员函数array()或object()检索文档中包含的数组或对象,然后读取JSON数据,或者修改数据。
- QJsonObject: 封装了一个JSON对象, 可以使用它的成员函数size()、insert()和remove()来对修改JSON数据.
- QJsonArray: 封装了一个JSON数组,用来实现JSON数组的
1.解析JSON-示例
注意:JSON中的Key命名不能相同,否则的话会覆盖掉,比如:
{
"FLAG": ,
"FLAG": "example"
}
最终只能读取到FLAG的"example"值.
json文件示例内容如下:
{
"FLAG": ,
"NAME": "example",
"ARRAYS":
[
{
"Name": "array1",
"String": "哈哈哒1"
},
{
"Name": "array2",
"String": "哈哈哒2"
},
{
"Name": "array3",
"String": "哈哈哒3"
},
{
"Name": "array4",
"String": "哈哈哒4"
}
]
}
程序如下:
bool parseJson()
{
//打开文件
QFile file(QApplication::applicationDirPath()+"/1.json");
if(!file.open(QIODevice::ReadOnly)) {
qDebug() << "File open failed!";
} else {
qDebug() <<"File open successfully!";
}
QJsonParseError *error=new QJsonParseError;
QJsonDocument jdc=QJsonDocument::fromJson(file.readAll(),error); //判断文件是否完整
if(error->error!=QJsonParseError::NoError)
{
qDebug()<<"parseJson:"<<error->errorString();
return false;
} QJsonObject obj = jdc.object(); //获取对象
qDebug() <<"object size:"<<obj.size(); QStringList list = obj.keys();
foreach (QString key, list) {
if(obj[key].isString())
{
qDebug()<<"key:"<<key<<"value:"<<obj[key].toString();
}
else if(obj[key].isArray() && key =="ARRAYS")
{
QJsonArray arr = obj[key].toArray();
for(int i=;i<arr.count();i++)
{
QJsonObject arrObj= arr[i].toObject();
qDebug()<<"key:\"Name\""<<"value:"<<arrObj["Name"].toString();
qDebug()<<"key:\"String\""<<"value:"<<arrObj["String"].toString();
}
}
} return true;
}
打印如下:

写JSON-示例
代码如下:
bool writeJson()
{
//打开文件
QFile file(QApplication::applicationDirPath()+"/1.json");
if(!file.open(QIODevice::WriteOnly)) {
qDebug() << "File open failed!";
} else {
qDebug() <<"File open successfully!";
} QJsonDocument jdoc;
QJsonObject obj;
QJsonArray arr; for(int i=;i<;i++)
{
QJsonObject Member; //定义数组成员
Member["Name"] = QString("array%1").arg(i);
Member["String"] = QString("哈哈哒%1").arg(i);
arr.append(Member);
} obj["ARRAYS"] = arr;
obj["NAME"] ="example";
obj["FLAG"] =""; jdoc.setObject(obj);
file.write(jdoc.toJson(QJsonDocument::Indented)); //Indented:表示自动添加/n回车符
file.close();
}
文件保存如下:

50.Qt-QJsonDocument读写json的更多相关文章
- Qt 学习之路 2(64):使用 QJsonDocument 处理 JSON
Home / Qt 学习之路 2 / Qt 学习之路 2(64):使用 QJsonDocument 处理 JSON Qt 学习之路 2(64):使用 QJsonDocument 处理 JSON 豆子 ...
- Qt读写Json
Qt操作Json 1.QJsonDocument 1.详细说明 QJsonDocument类提供了读写JSON文档的方法. QJsonDocument是一个封装了完整JSON文档的类,可以从基于UTF ...
- Qt中使用Json
Qt中使用Json需要一下几个类: QJsonValue 代表了json格式中的一个值 QJsonObject 代表了json格式的一个对象 QJsonArra ...
- QT实现HTTP JSON高效多线程处理服务器
QT实现HTTP JSON高效多线程处理服务器 Legahero QQ:1395449850 现在一个平台级的系统光靠web打天下是不太现实的了,至少包含APP和web两部分,在早期APP直接访问we ...
- Qt QJson解析json数据
Qt QJson解析json数据 //加载根目录文件 void TeslaManageData::loadRootFolderFiles() { QNetworkAccessManager *mana ...
- Qt 二进制文件读写(使用“魔术数字”)
今天开始进入 Qt 的另一个部分:文件读写,也就是 IO.文件读写在很多应用程序中都是需要的.Qt 通过 QIODevice 提供了IO的抽象,这种设备(device)具有读写字节块的能力.常用的IO ...
- Android读写JSON格式的数据之JsonWriter和JsonReader
近期的好几个月都没有搞Android编程了,逐渐的都忘却了一些东西.近期打算找一份Android的工作,要继续拾起曾经的东西.公司月初搬家之后就一直没有网络,直到今日公司才有网络接入,各部门才開始办公 ...
- python 读写json文件(dump, load),以及对json格式的数据处理(dumps, loads)
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. 1.json.dumps()和json.loads()是json ...
- 读写JSON作配置文件
个人不太喜欢XML,于是找了JSON来做配置,JSON虽然有很多引号,但这种key-value的形式,非常符合我的思维,就像是一个萝卜一个坑.最近在读写JSON文件,需要注意两个问题. 中文乱码: 直 ...
- iOS 如何用JSONKit读写JSON文件
如何用JSONKit读写JSON文件 分类: ios2013-04-20 12:46 510人阅读 评论(0) 收藏 举报 JSON文件格式简单,使用方便,值得一用. 目前已经有多个库支持Json文 ...
随机推荐
- Rsync服务常见问题
转---Rsync 故障排查整理 Rsync服务常见问题汇总讲解: 1. 客户端的错误现象:No route to host rsync服务端开启的iptables**防火墙** [root@nfs0 ...
- find命令面试题
注意 (1)建议先创建快照 (2)有可能存在命令正确,但是查找不到文件的情况,是因为不存在相关条件的文件 (3)如果存在命令正确,但是查找不到文件的情况,则先创建相关的文件.目录.用户.组,设置好对应 ...
- JDK路径配置,tomcat可以直接启动
path classpath java_home 修改tomcat配置文件,直接写入jdk路径,不推荐
- SpringBoot系列教程之Bean加载顺序之错误使用姿势辟谣
在网上查询 Bean 的加载顺序时,看到了大量的文章中使用@Order注解的方式来控制 bean 的加载顺序,不知道写这些的博文的同学自己有没有实际的验证过,本文希望通过指出这些错误的使用姿势,让观文 ...
- Java properties | FileNotFoundException: properties (系统找不到指定的文件。)
文件存储路径的问题 错误描述 :FileNotFoundException: init.properties (系统找不到指定的文件.) 1.方法一 InputStream fis =TestProp ...
- Unity系统消息广播
# 1.前言Unity自带消息系统,如SendMessage等,此方法利用的反射,且会反射游戏物体上的所有组件,对性能不友好.而且由于参数为方法名称,所以如果使用代码混淆,则会无法调用 方法,且难以追 ...
- APP打包设置程序版本号
正确设置方式是: 注意,以下修改不会起作用<manifestxmlns:android="http://schemas.android.com/apk/res/android" ...
- FastReport快速实现条形码,二维码面单打印
一.什么是FastReport? FastReport是功能齐全的报表控件,使开发者可以快速并高效地为·NET/VCL/COM/ActiveX应用程序添加报表支持. FastReport有很多产品,如 ...
- linux C进程常用操作
不登高山,不知天之高也: 不临深溪,不知地之厚也. 荀子<劝学> linux应用层主要是一个个独立任务的进程在运行,但是很多时候,在工作中我们可能很少去重新写一个进程, 大部分的工作都是分 ...
- python基础-字典dict
字典-dict 用途: 定义方法:通过{} 来存储数据,通过key:value (键值对)来存储数据,每个键值对通过逗号分隔.在键值对中,key 是不可变的数据类型,value 是任意数据类型 def ...