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

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

// 判断是否是Array类型
if (colorValue.type() == QJsonValue::Array) {
// 转换为QJsonArray类型
QJsonArray colorArray = colorValue.toArray();

for (int i = 0; i < colorArray.size(); i++) {
	QJsonValue color = colorArray.at(i);
	qDebug() << "color = " << color.toString();
}

}

7. 解析数组中的对象 [ { } ]  
 也就是解析下图内容:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210703160103999.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NwcF9sZWFybmVy,size_16,color_FFFFFF,t_70#pic_center)  
 解析代码:

 

// 根键获取值
QJsonValue likeValue = rootObj.value(“like”);
// 判断类型是否是数组类型
if (likeValue.type() == QJsonValue::Array) {
// 转换成数组类型
QJsonArray likeArray = likeValue.toArray();
// 遍历数组
for (int i = 0; i < likeArray.count(); i++) {
// 获取数组的第一个元素,类型是QJsonValue
QJsonValue likeValueChild = likeArray.at(i);
// 判断是不是对象类型
if (likeValueChild.type() == QJsonValue::Object) {
// 转换成对象类型
QJsonObject likeObj = likeValueChild.toObject();
// 最后通过value函数就可以获取到值了,解析成功!
QJsonValue gameLikeValue = likeObj.value(“game”);
qDebug() << "game = " << gameLikeValue.toString();
QJsonValue priceLikeValue = likeObj.value(“price”);
qDebug() << "price = " << priceLikeValue.toDouble();
}
}
}

8. 解析 对象 中 对象 { { } }  
 也就是解析下图内容:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210703160544318.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NwcF9sZWFybmVy,size_16,color_FFFFFF,t_70#pic_center)  
 解析代码:

 

// 根据建获取值
QJsonValue languagesValue = rootObj.value(“languages”);
// 判断是不是对象类型
if (languagesValue.type() == QJsonValue::Object) {
// 转换成对象类型
QJsonObject languagesObj = languagesValue.toObject();
// 根据建获取值
QJsonValue serialOneValue = languagesObj.value(“serialOne”);
// 判断是不是对象类型
if (serialOneValue.type() == QJsonValue::Object) {
// 转换成对象类型
QJsonObject serialOneObj = serialOneValue.toObject();
// 根据建获取值
QJsonValue languageValue = serialOneObj.value(“language”);
// 最后转换成对应类型就解析出来了!
qDebug() << "language = " << languageValue.toString();
QJsonValue gradeValue = serialOneObj.value(“grade”);
qDebug() << "grade = " << gradeValue.toInt();
}

QJsonValue serialTwoValue = languagesObj.value("serialTwo");
if (serialTwoValue.type() == QJsonValue::Object) {
	QJsonObject serialTwoObj = serialTwoValue.toObject();

	QJsonValue languageValue = serialTwoObj.value("language");
	qDebug() << "language = " << languageValue.toString();
	QJsonValue gradeValue = serialTwoObj.value("grade");
	qDebug() << "grade = " << gradeValue.toInt();
}

}



解析运行结果如下:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210703160930854.png#pic_center)


9. 解析 数组 中 数组 [ [ ] [ ] ]

 **对应上面补充内容的解析操作!**

 也就是解析下图内容:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/ddd966a652024396b8154f22f2ac4557.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAY3BwX2xlYXJuZXJz,size_17,color_FFFFFF,t_70,g_se,x_16#pic_center)  
 解析代码:

 

// 根键获取值
QJsonValue colorValue = rootObject.value(“color”);
// 判断类型是否是数组类型
if (colorValue.type() == QJsonValue::Array) {
// 转换成数组类型
QJsonArray colorArray = colorValue.toArray();
// 遍历数组
for (int i = 0; i < colorArray.count(); i++) {
// 获取数组的第一个元素,类型是QJsonValue
QJsonValue colorValueChild = colorArray.at(i);
// 判断是不是数组类型
if (colorValueChild.type() == QJsonValue::Array) {
// 转换成数组类型
QJsonArray colorArr = colorValueChild.toArray();

		for (int i = 0; i < colorArr.size(); i++) {
			QJsonValue color = colorArr.at(i);
			qDebug() << "color = " << color.toString();
		}
		
	}
}

}



## 四、修改Json


修改的过程就是:将数据从文件中读取出来,解析成QJsonDocument对象后,在获取跟对象{ },通过跟对象在获取其他的对象{}或者数组[],修改后,再赋值给跟对象{},达到替换效果,也就是修改了,最后再写入文件即可!


1. 读取数据解析成QJsonDocument代码省略,跟上面一样
2. 获取根节点对象

 

// 获取根 { }
QJsonObject rootObj = doc.object();

3. 修改属性

 

// 修改name属性
rootObj[“name”] = “老李”;
rootObj[“vip”] = false;

 修改前:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210703161730366.png#pic_center)  
 修改后:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210703161840268.png#pic_center)
4. 修改数组 [ ] 中的元素

 

QJsonValue colorValue = rootObj.value(“color”);
if (colorValue.type() == QJsonValue::Array) {
QJsonArray colorArray = colorValue.toArray();

// 修改数组中的值
colorArray.replace(0, "blue");
colorArray.replace(1, "green");

// 赋值覆盖原有数组属性
rootObj["color"] = colorArray;

}

 修改前:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210703162040272.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NwcF9sZWFybmVy,size_16,color_FFFFFF,t_70#pic_center)  
 修改后:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210703162102969.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NwcF9sZWFybmVy,size_16,color_FFFFFF,t_70#pic_center)
5. 修改 { } 中的值

 

QJsonValue interestValue = rootObj.value(“interest”);
if (interestValue.type() == QJsonValue::Object) {
QJsonObject interestObject = interestValue.toObject();

interestObject["badminton"] = "乒乓球";
interestObject["basketball"] = "足球";

rootObj["interest"] = interestObject;

}

 修改前:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210703162411157.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NwcF9sZWFybmVy,size_16,color_FFFFFF,t_70#pic_center)

 修改后:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210703162329200.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NwcF9sZWFybmVy,size_16,color_FFFFFF,t_70#pic_center)
6. 修改 { { } } 中的值

 

QJsonValue languagesValue = rootObj.value(“languages”);
if (languagesValue.type() == QJsonValue::Object) {
QJsonObject languagesObj = languagesValue.toObject();

// 找到内部第一个 { }
QJsonValue serialOneValue = languagesObj.value("serialOne");
if (serialOneValue.type() == QJsonValue::Object) {
	QJsonObject serialOneObj = serialOneValue.toObject();

	serialOneObj["grade"] = "20";

	languagesObj["serialOne"] = serialOneObj;
}

// 找到内部第二个 { }
QJsonValue serialTwoValue = languagesObj.value("serialTwo");
if (serialTwoValue.type() == QJsonValue::Object) {
	QJsonObject serialTwoObj = serialTwoValue.toObject();

	serialTwoObj["grade"] = "10";
	serialTwoObj["language"] = "粤语";

	languagesObj["serialTwo"] = serialTwoObj;
}

rootObj["languages"] = languagesObj;

}

 修改前:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210703162544119.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NwcF9sZWFybmVy,size_16,color_FFFFFF,t_70#pic_center)  
 修改后:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210703162619177.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NwcF9sZWFybmVy,size_16,color_FFFFFF,t_70#pic_center)
7. 修改 [ { } ]

 

QJsonValue likeValue = rootObj.value(“like”);
if (likeValue.type() == QJsonValue::Array) {
QJsonArray likeArray = likeValue.toArray();

// 根据索引获得对应{ }
QJsonObject obj1 = likeArray[0].toObject();
obj1["game"] = "欢乐斗地主";
obj1["price"] = 88.8;
QJsonObject obj2 = likeArray[1].toObject();
obj2["game"] = "欢乐斗牛";
obj2["price"] = 77.7;

// 替换覆盖
likeArray.replace(0, obj1);
likeArray.replace(1, obj2);

rootObj["like"] = likeArray;

}

 修改前:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210703162855280.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NwcF9sZWFybmVy,size_16,color_FFFFFF,t_70#pic_center)  
 修改后:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210703162921838.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NwcF9sZWFybmVy,size_16,color_FFFFFF,t_70#pic_center)
8. 写入文件  
 最后,再将跟节点对象{ }重新设置给QJsonDocument对象,在重新写入文件即可!

 

// 将object设置为本文档的主要对象
doc.setObject(rootObj);

// 重写打开文件,覆盖原有文件,达到删除文件全部内容的效果
QFile writeFile(“…/Json/js.json”);
if (!writeFile.open(QFile::WriteOnly | QFile::Truncate)) {
qDebug() << “can’t open error!”;
return;
}

// 将修改后的内容写入文件
QTextStream wirteStream(&writeFile);
wirteStream.setCodec(“UTF-8”); // 设置读取编码是UTF8
wirteStream << doc.toJson(); // 写入文件
writeFile.close(); // 关闭文件





---


## 五、删除Json


删除跟修改类似的,使用跟节点对象找到对象{}或者数组[]后,使用remove函数指定键参数进行删除!


1. 读取数据解析成QJsonDocument代码省略,跟上面一样
2. 获取根节点对象

 

// 获取根 { }
QJsonObject rootObj = doc.object();

3. 删除属性

 

// 删除age
rootObj.remove(“age”);

4. 删除数组[]中的元素

 

QJsonValue colorValue = rootObj.value(“color”);
if (colorValue.type() == QJsonValue::Array) {
QJsonArray colorArray = colorValue.toArray();

// 删除数组中索引为1的值
colorArray.removeAt(1);

// 赋值覆盖原有数组属性
rootObj["color"] = colorArray;

}

 删除前:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210703163849732.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NwcF9sZWFybmVy,size_16,color_FFFFFF,t_70#pic_center)  
 删除后:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210703163929247.png#pic_center)
5. 删除 { } 中的值

 

QJsonValue interestValue = rootObj.value(“interest”);
if (interestValue.type() == QJsonValue::Object) {
QJsonObject interestObject = interestValue.toObject();

// 删除键为basketball的属性元素
interestObject.remove("basketball");

rootObj["interest"] = interestObject;

}

 删除前:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210703164102934.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NwcF9sZWFybmVy,size_16,color_FFFFFF,t_70#pic_center)  
 删除后:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210703164125848.png#pic_center)
6. 删除 { { } } 中的值

 

QJsonValue languagesValue = rootObj.value(“languages”);
if (languagesValue.type() == QJsonValue::Object) {
QJsonObject languagesObj = languagesValue.toObject();

// 删除键为serialTwo的对象 { }
languagesObj.remove("serialTwo");

rootObj["languages"] = languagesObj;

}

 删除前:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2021070316423781.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NwcF9sZWFybmVy,size_16,color_FFFFFF,t_70#pic_center)  
 删除后:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210703164310384.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NwcF9sZWFybmVy,size_16,color_FFFFFF,t_70#pic_center)
7. 删除 [ ] 中的 { }

 

QJsonValue likeValue = rootObj.value(“like”);
if (likeValue.type() == QJsonValue::Array) {
QJsonArray likeArray = likeValue.toArray();

// 删除索引为1数组中的值
likeArray.removeAt(1);

rootObj["like"] = likeArray;

}

 删除前:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/202107031646283.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NwcF9sZWFybmVy,size_16,color_FFFFFF,t_70#pic_center)  
 删除后:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210703164702397.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NwcF9sZWFybmVy,size_16,color_FFFFFF,t_70#pic_center)
8. 删除 对象 { } 与 删除 数组 [ ]

 

// 删除 [ ]
rootObj.remove(“color”);

// 删除 { }
rootObj.remove(“interest”);

 删除后就没有啦!
9. 写入文件  
 最后,再将跟节点对象{ }重新设置给QJsonDocument对象,在重新写入文件即可!  
 与上同,这里就不写下代码了!


## 六、全部代码


我这代码使用VS2017新建一个QT空项目写出来的!


指定编码  
 #pragma execution\_character\_set(“utf-8”) // qt支持显示中文



#include

#include // { }
#include // [ ]
#include // 解析Json
#include // int float double bool null { } [ ]
#include

#include
#include
#include

#pragma execution_character_set(“utf-8”) // qt支持显示中文

// 封装Json
void createJson() {

/\*

* “interest”: {
* “basketball”: “篮球”,
* “badminton”: “羽毛球”
* },
*/
// 定义 { } 对象
QJsonObject interestObj;
// 插入元素,对应键值对
interestObj.insert(“basketball”, “篮球”);
interestObj.insert(“badminton”, “羽毛球”);

/\*

* “color”: [ “black”, “white”],
*/
// 定义 [ ] 数组
QJsonArray colorArray;
// 往数组中添加元素
colorArray.append(“black”);
colorArray.append(“white”);

/\*

* “like”: [
* { “game”: “三国杀”, “price”: 58.5 },
* { “game”: “海岛奇兵”, “price”: 66.65 }
* ],
*/
// 定义 { } 对象
QJsonObject likeObject1;
likeObject1.insert(“game”, “三国杀”);
likeObject1.insert(“price”, 58.5);

QJsonObject likeObject2;
likeObject2.insert("game", "海岛奇兵");
likeObject2.insert("price", 66.65);

// 定义 [ ] 对象
QJsonArray likeArray;
likeArray.append(likeObject1);
likeArray.append(likeObject2);



/\*

* “languages”: {
* “serialOne”: { “language”: “汉语”, “grade”: 10 },
* “serialTwo”: { “language”: “英语”, “grade”: 6 }
* },
*/
// 定义 { } 对象
QJsonObject language1;
language1.insert(“language”, “汉语”);
language1.insert(“grade”, 10);

QJsonObject language2;
language2.insert("language", "英语");
language2.insert("grade", 6);

QJsonObject languages;
// 将{ } 插入 { } 中
languages.insert("serialOne", language1);
languages.insert("serialTwo", language2);



// 定义根节点 也即是最外层 { }
QJsonObject rootObject;

// 插入元素
rootObject.insert("name", "老王");
rootObject.insert("age", 26);
rootObject.insert("interest", interestObj);
rootObject.insert("color", colorArray);
rootObject.insert("like", likeArray);
rootObject.insert("languages", languages);
rootObject.insert("vip", true);
rootObject.insert("address", QJsonValue::Null);


// 将json对象里的数据转换为字符串
QJsonDocument doc;
// 将object设置为本文档的主要对象
doc.setObject(rootObject);


// Json字符串保存到json文件里
QFile file("../Json/js.json");
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
	qDebug() << "can't open error!";
	return;

}

QTextStream stream(&file);
stream.setCodec("UTF-8");		// 设置写入编码是UTF8
// 写入文件
stream << doc.toJson();
file.close();

}

// 解析Json
void analysisJson() {
QFile file(“…/Json/js.json”);
if (!file.open(QFile::ReadOnly | QFile::Text)) {
qDebug() << “can’t open error!”;
return;
}

// 读取文件的全部内容
QTextStream stream(&file);
stream.setCodec("UTF-8");		// 设置读取编码是UTF8
QString str = stream.readAll();

file.close();

/\* 解析Json \*/

// QJsonParseError类用于在JSON解析期间报告错误。
QJsonParseError jsonError;
// 将json解析为UTF-8编码的json文档,并从中创建一个QJsonDocument。
// 如果解析成功,返回QJsonDocument对象,否则返回null
QJsonDocument doc = QJsonDocument::fromJson(str.toUtf8(), &jsonError);
// 判断是否解析失败
if (jsonError.error != QJsonParseError::NoError && !doc.isNull()) {
	qDebug() << "Json格式错误!" << jsonError.error;
	return;
}

// 获取根 { }
QJsonObject rootObj = doc.object();


// 根据键获取值
QJsonValue nameValue = rootObj.value("name");
qDebug() << "name = " << nameValue.toString();


QJsonValue ageValue = rootObj.value("age");
qDebug() << "age = " << ageValue.toInt();



// 解析对象 { }
QJsonValue interestValue = rootObj.value("interest");
// 判断是否是object类型
if (interestValue.type() == QJsonValue::Object) {
	// 转换为QJsonObject类型
	QJsonObject interestObj = interestValue.toObject();

	QJsonValue basketballValue = interestObj.value("basketball");
	qDebug() << "basketball = " << basketballValue.toString();
	QJsonValue badmintonValue = interestObj.value("badminton");
	qDebug() << "badminton = " << badmintonValue.toString();
}


// 解析数组 [ ]
QJsonValue colorValue = rootObj.value("color");
// 判断是否是Array类型
if (colorValue.type() == QJsonValue::Array) {
	// 转换为QJsonArray类型
	QJsonArray colorArray = colorValue.toArray();

	for (int i = 0; i < colorArray.size(); i++) {
		QJsonValue color = colorArray.at(i);
		qDebug() << "color = " << color.toString();
	}
}


// 解析数组中的对象 [ { } ]
QJsonValue likeValue = rootObj.value("like");
if (likeValue.type() == QJsonValue::Array) {
	QJsonArray likeArray = likeValue.toArray();

	for (int i = 0; i < likeArray.count(); i++) {
		QJsonValue likeValueChild = likeArray.at(i);

		if (likeValueChild.type() == QJsonValue::Object) {
			QJsonObject likeObj = likeValueChild.toObject();

			QJsonValue gameLikeValue = likeObj.value("game");
			qDebug() << "game = " << gameLikeValue.toString();
			QJsonValue priceLikeValue = likeObj.value("price");
			qDebug() << "price = " << priceLikeValue.toDouble();
		}
	}
}




// 解析 对象 中 对象 { { } }
QJsonValue languagesValue = rootObj.value("languages");
if (languagesValue.type() == QJsonValue::Object) {
	QJsonObject languagesObj = languagesValue.toObject();

	QJsonValue serialOneValue = languagesObj.value("serialOne");
	if (serialOneValue.type() == QJsonValue::Object) {
		QJsonObject serialOneObj = serialOneValue.toObject();

		QJsonValue languageValue = serialOneObj.value("language");
		qDebug() << "language = " << languageValue.toString();
		QJsonValue gradeValue = serialOneObj.value("grade");
		qDebug() << "grade = " << gradeValue.toInt();
	}

	QJsonValue serialTwoValue = languagesObj.value("serialTwo");
	if (serialTwoValue.type() == QJsonValue::Object) {
		QJsonObject serialTwoObj = serialTwoValue.toObject();

		QJsonValue languageValue = serialTwoObj.value("language");
		qDebug() << "language = " << languageValue.toString();
		QJsonValue gradeValue = serialTwoObj.value("grade");
		qDebug() << "grade = " << gradeValue.toInt();
	}
}


// 解析 bool类型
QJsonValue vipValue = rootObj.value("vip");
qDebug() << "vip = " << vipValue.toBool();


// 解析 null类型
QJsonValue addressValue = rootObj.value("address");
if (addressValue.type() == QJsonValue::Null) {
	qDebug() << "address = " << "null";
}

}

// 修改Json数据
void alterJson() {
/* 修改也就再重写写一遍覆盖掉就行 */

QFile readFile("../Json/js.json");
if (!readFile.open(QFile::ReadOnly | QFile::Truncate)) {
	qDebug() << "can't open error!";
	return;
}

// 读取文件的全部内容
QTextStream readStream(&readFile);
readStream.setCodec("UTF-8");		// 设置读取编码是UTF8
QString str = readStream.readAll();
readFile.close();

/\* 修改Json \*/

// QJsonParseError类用于在JSON解析期间报告错误。
QJsonParseError jsonError;
// 将json解析为UTF-8编码的json文档,并从中创建一个QJsonDocument。
// 如果解析成功,返回QJsonDocument对象,否则返回null
QJsonDocument doc = QJsonDocument::fromJson(str.toUtf8(), &jsonError);
if (jsonError.error != QJsonParseError::NoError && !doc.isNull()) {
	qDebug() << "Json格式错误!" << jsonError.error;
	return;
}

// 获取根 { }
QJsonObject rootObj = doc.object();

// 修改name属性
rootObj["name"] = "老李";
rootObj["vip"] = false;


// 修改数组[]中的元素
QJsonValue colorValue = rootObj.value("color");
if (colorValue.type() == QJsonValue::Array) {
	QJsonArray colorArray = colorValue.toArray();

	// 修改数组中的值
	colorArray.replace(0, "blue");
	colorArray.replace(1, "green");

	// 赋值覆盖原有数组属性
	rootObj["color"] = colorArray;
}



// 修改 { } 中的值
QJsonValue interestValue = rootObj.value("interest");
if (interestValue.type() == QJsonValue::Object) {
	QJsonObject interestObject = interestValue.toObject();

	interestObject["badminton"] = "乒乓球";
	interestObject["basketball"] = "足球";

	rootObj["interest"] = interestObject;
}


// 修改 { { } } 中的值
QJsonValue languagesValue = rootObj.value("languages");
if (languagesValue.type() == QJsonValue::Object) {
	QJsonObject languagesObj = languagesValue.toObject();

	// 找到内部第一个 { }
	QJsonValue serialOneValue = languagesObj.value("serialOne");
	if (serialOneValue.type() == QJsonValue::Object) {
		QJsonObject serialOneObj = serialOneValue.toObject();

		serialOneObj["grade"] = "20";

		languagesObj["serialOne"] = serialOneObj;
	}

	// 找到内部第二个 { }
	QJsonValue serialTwoValue = languagesObj.value("serialTwo");
	if (serialTwoValue.type() == QJsonValue::Object) {
		QJsonObject serialTwoObj = serialTwoValue.toObject();

		serialTwoObj["grade"] = "10";
		serialTwoObj["language"] = "粤语";

		languagesObj["serialTwo"] = serialTwoObj;
	}

	rootObj["languages"] = languagesObj;
}



// 修改 [ { } ] 
QJsonValue likeValue = rootObj.value("like");
if (likeValue.type() == QJsonValue::Array) {
	QJsonArray likeArray = likeValue.toArray();

	// 根据索引获得对应{ }
	QJsonObject obj1 = likeArray[0].toObject();
	obj1["game"] = "欢乐斗地主";
	obj1["price"] = 88.8;
	QJsonObject obj2 = likeArray[1].toObject();
	obj2["game"] = "欢乐斗牛";
	obj2["price"] = 77.7;

	// 替换覆盖
	likeArray.replace(0, obj1);
	likeArray.replace(1, obj2);

	rootObj["like"] = likeArray;
}


// 将object设置为本文档的主要对象
doc.setObject(rootObj);

// 重写打开文件,覆盖原有文件,达到删除文件全部内容的效果
QFile writeFile("../Json/js.json");
if (!writeFile.open(QFile::WriteOnly | QFile::Truncate)) {
	qDebug() << "can't open error!";
	return;
}

// 将修改后的内容写入文件
QTextStream wirteStream(&writeFile);
wirteStream.setCodec("UTF-8");		// 设置读取编码是UTF8
wirteStream << doc.toJson();		// 写入文件
writeFile.close();					// 关闭文件

}

// 删除Json
void delJson() {
QFile readFile(“…/Json/js.json”);
if (!readFile.open(QFile::ReadOnly | QFile::Truncate)) {
qDebug() << “can’t open error!”;
return;
}

// 读取文件的全部内容
QTextStream readStream(&readFile);
readStream.setCodec("UTF-8");		// 设置读取编码是UTF8

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

n;
}

// 将修改后的内容写入文件
QTextStream wirteStream(&writeFile);
wirteStream.setCodec("UTF-8");		// 设置读取编码是UTF8
wirteStream << doc.toJson();		// 写入文件
writeFile.close();					// 关闭文件

}

// 删除Json
void delJson() {
QFile readFile(“…/Json/js.json”);
if (!readFile.open(QFile::ReadOnly | QFile::Truncate)) {
qDebug() << “can’t open error!”;
return;
}

// 读取文件的全部内容
QTextStream readStream(&readFile);
readStream.setCodec("UTF-8");		// 设置读取编码是UTF8

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
[外链图片转存中…(img-SadDXqlS-1715897100210)]
[外链图片转存中…(img-SuBRHuvL-1715897100210)]

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 22
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值