Json介绍,QT解析和生成Json

目录

1.Json简介

2.QT中的Json

2.1.QJsonObject

2.1.1.QJsonObject的“增删改查”及遍历

2.2.QJsonArray

​​​​​​​2.2.1.QJsonArray的“增删改查”及遍历

3.解析Json文件

4.生成Json文件

1.Json简介

Json文件是一种文本文件,常用于轻量级的数据交换,易于人阅读,同时也易于机器解析和生成。

Json中有两种结构:

  • “键/值”对的集合,在不同的编程语言中,它被理解成:对象(object ,QT C++),记录(record),结构(struct),字典(dictionary),哈希表(hash table)等等。
  • 值的有序列表,在大部分语言中,它被理解成数组(array)。

而且这两种结构还可以相互嵌套

2.QT中的Json

2.1.QJsonObject

在QT中Json中的“键/值”对集合被理解成一个对象(QJsonObject)。键必须是字符串类型。

一个对象以左括号开始,右括号结束。每个“键”(key)之后跟一个冒号,冒号后面是对应的值(value)。“键/值”对之间用逗号分隔。下面是一个对象的示例。

{

        key1:value1,

        key2:value2,

}

Json介绍,QT解析和生成Json_第1张图片

 2.1.1.QJsonObject的“增删改查”及遍历

QJsonObject  jsonObj;

//增加键值对

jsonObj.insert("key1",QJsonValue(1));

jsonObj.insert("key2",QJsonValue(2));

jsonObj.insert("key3",QJsonValue(3));

//根据键查找对应的值

jsonObj.value("key1");//返回键“key1”对应的值1

jsonObj.value("key2");//返回键“key2”对应的值2

jsonObj.value("key3");//返回键“key3”对应的值3

//改变键原来对应的值

jsonObj.insert("key1",QJsonValue("change"));//将“key1”对应的值1改为字符串“change”

//删除键值对

jsonObj.take("key1");//删除键“key1”的键值对,并返回对应的值

jsonObj.remove("key2");//删除键“key2”的键值对,无返回值

//遍历QJsonObject::const_iterator是键值对类型

//constBegin是第一个键值对,constEnd是最后一个键值对

for(QJsonObject::const_iterator it=jsonObj.constBegin();it!=jsonObj.constEnd();it++)

{

        it.key();

        it.value();

}

或者

foreach(QString key, jsonObj.keys())

{

        qDebug()<

        qDebug()<

}

​​​​​​​2.2.QJsonArray

数组是值(value)的有序集合,数组以左中括号开始,又中括号结束,值之间用逗号分隔。下面是一个数组的示例。

[

        value1,

        value2,

]

Json介绍,QT解析和生成Json_第2张图片

值可以是字符串、数字、bool值、对象或者数组:

Json介绍,QT解析和生成Json_第3张图片​​​​​​​

 

​​​​​​​2.2.1.QJsonArray的“增删改查”及遍历

QJsonArray  jsonArray;

//在尾部增加值

jsonArray.append(QJsonValue(1));

jsonArray.append(QJsonValue(2));

jsonArray.append(QJsonValue(3));

//根据索引查找对应的值,索引是从0开始

jsonArray.at(0);//返回索引0对应的值1,即第一个值

jsonArray.at(1);//返回索引1对应的值2

jsonArray.at(2);//返回索引2对应的值3

//改变键原来对应的值

jsonArray.insert(0,QJsonValue("change"));//将索引0对应的值1改为字符串“change”

//删除值

jsonArray.removeAt(0);//删除索引0对应的值,后面的值向前递补

//遍历

for(int i=0;i

{

        jsonArray.at(i);

}

3.解析Json文件

有一个Json文本,QT要怎么读取并解析呢?这就要用到QJsonDocument数据类型了。

QJsonDocument  jsonDoc;

QFile jsonFile("test.json");

jsonFile.open(QIODevice::ReadOnly);

QByteArray jsonData=jsonFile.readAll();

jsonFile.close();

jsonDoc=QJsonDocument::fromJson(jsonData,NULL);

//开始解析,解析成QJsonArray 或者QJsonObject 之后就好办了。

QJsonArray jsonArray;

QJsonObject jsonObject;

if(jsonDoc.isArray())

{

        jsonArray=jsonDoc.array();

}

else if(jsonDoc.isObject())

{

        jsonObject=jsonDoc.object();

}

4.生成Json文件

QFile jsonFile("outJson.json");

jsonFile.open(QIODevice::ReadWrite);

//先清空文件

jsonFile.resize(0);

//制造jsonObject

QJsonObject jsonObject;

jsonObject.insert("School","北京一中");

jsonObject.insert("Part", "西城区");

jsonObject.insert("Class", "三年级");

/制造jsonArray

QJsonArray jsonArray;

jsonArray.append(jsonObject);

QJsonDocument  jsonDoc;

//将jsonArray作为根节点

jsonDoc.setArray(jsonArray);

//或者将jsonObject作为根节点

jsonDoc.setObject(jsonObject);

//写入文本

jsonFile.write(jsonDoc.toJson());

jsonFile.close();

你可能感兴趣的:(QT,json,qt,开发语言)