我这代码使用VS2017新建一个QT空项目写出来的!
指定编码
#pragma execution_character_set(“utf-8”) // qt支持显示中文
#include <QCoreApplication>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonValue>
#include <QJsonParseError>
#include <QDebug>
#include <QFile>
#include <QTextStream>
#pragma execution_character_set("utf-8")
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);
QJsonDocument doc;
doc.setObject(rootObject);
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");
stream << doc.toJson();
file.close();
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");
QString str = stream.readAll();
file.close();
QJsonParseError jsonError;
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");
if (interestValue.type() == QJsonValue::Object) {
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");
if (colorValue.type() == QJsonValue::Array) {
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();
QJsonValue vipValue = rootObj.value("vip");
qDebug() << "vip = " << vipValue.toBool();
QJsonValue addressValue = rootObj.value("address");
if (addressValue.type() == QJsonValue::Null) {
qDebug() << "address = " << "null";
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");
QString str = readStream.readAll();
readFile.close();
QJsonParseError jsonError;
QJsonDocument doc = QJsonDocument::fromJson(str.toUtf8(), &jsonError);
if (jsonError.error != QJsonParseError::NoError && !doc.isNull()) {
qDebug() << "Json格式错误!" << jsonError.error;
return;
QJsonObject rootObj = doc.object();
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;
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");
wirteStream << doc.toJson();
writeFile.close();
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");
QString str = readStream.readAll();
readFile.close();
QJsonParseError jsonError;
QJsonDocument doc = QJsonDocument::fromJson(str.toUtf8(), &jsonError);
if (jsonError.error != QJsonParseError::NoError && !doc.isNull()) {
qDebug() << "Json格式错误!" << jsonError.error;
return;
QJsonObject rootObj = doc.object();
rootObj.remove("age");
QJsonValue colorValue = rootObj.value("color");
if (colorValue.type() == QJsonValue::Array) {
QJsonArray colorArray = colorValue.toArray();
colorArray.removeAt(1);
rootObj["color"] = colorArray;
QJsonValue interestValue = rootObj.value("interest");
if (interestValue.type() == QJsonValue::Object) {
QJsonObject interestObject = interestValue.toObject();
interestObject.remove("basketball");
rootObj["interest"] = interestObject;
QJsonValue languagesValue = rootObj.value("languages");
if (languagesValue.type() == QJsonValue::Object) {
QJsonObject languagesObj = languagesValue.toObject();
languagesObj.remove("serialTwo");
rootObj["languages"] = languagesObj;
QJsonValue likeValue = rootObj.value("like");
if (likeValue.type() == QJsonValue::Array) {
QJsonArray likeArray = likeValue.toArray();
likeArray.removeAt(1);
rootObj["like"] = likeArray;
rootObj.remove("color");
rootObj.remove("interest");
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");
wirteStream << doc.toJson();
writeFile.close();
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
createJson();
analysisJson();
alterJson();
delJson();
return a.exec();
可能讲的不是很清楚,很多细节没有详细的描述。但是该有的操作都已经用代码操作出来了,可以根据自己的项目需求进行截取观看理解,不懂的在评论区留言,我再帮你解答吧,我尽力了!
另外,真的,真的,真的需要注意编码统一的问题,我在写解析时,就是没有考虑到编码问题,导致我找中文乱码问题找了两天,最后还是请教网上的大佬才解决,太郁闷了!(记得写入文件是什么格式,读取出来就得是什么格式,还有,由于我在代码开头就指定了编码是UTF-8,所以我写入文件和读取文件,都是指定了UTF-8格式,这样才不会出现中文乱码的情况!)
3、Json数组
Json数组使用[]表示,[]里面是元素,元素间使用 , 分隔,最后一个元素后面,没有 ,
一个Json数组,支持多种不同的数据类型,包括:整形,浮点型,字符串,json数组,json对象,空值-null(null)
Json数组中嵌套Json数组,父子关系
Json数组嵌套Js
QFile file("pin.json");
if (!file.open(QIODevice::WriteOnly)) {
qCritical() << "jsonFile open error";
// 使用QJsonObject对象插入键值对。
QJsonObject jsonObject;
jsonObject.insert("AdminPin", "123456");
jsonObject.insert("Us
// 打开 JSON 文件
QFile file("example.json");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
qDebug() << "无法打开文件";
return -1;
// 读取 JSON 数据
QByteArray data = file.readAll();
QJsonDocument doc = QJsonDocument::fromJson(data);
if (doc.isNull()) {
qDebug() << "无法解析 JSON 数据";
return -1;
// 获取 JSON 对象
QJsonObject obj = doc.object();
// 输出 JSON 数据
qDebug() << "name:" << obj["name"].toString();
qDebug() << "age:" << obj["age"].toInt();
return a.exec();
以上代码会读取名为 `example.json` 的 JSON 文件,并输出其中的 `name` 和 `age` 字段。如果 JSON 文件格式不正确,或者字段不存在,程序会输出相应的错误信息。
QJsonDoucument
它封装了一个完整的 JSON 文档,并且可以从 UTF-8 编码的基于文本的表示以及 Qt 自己的二进制格式读取和写入该文档。
QJsonArray
JSON 数组是一个值列表。可以通过从数组中插入和删除 QJsonValue 来操作该列表。
QJsonObject
JSON 对象是键值对的列表,其中键是唯一的字符串,值由 QJs
文章目录一、概述二、
Qt中的
JSON类2.1、构建
JSON2.1.1、构建
JSON字符串2.1.2、构建
JSON对象2.1.3、构建
JSON数组2.1.4 构建复杂的
JSON串2.2、
解析JSON2.2.1、
解析JSON对象2.2.2、
解析JSON数组2.2.3、
解析复杂的
JSON串
从
Qt5开始,官方就已经支持
JSON格式的数据了,有关
JSON的信息可以参考官网
JSON用于存储结构化的数据,存储的值有6种格式:
1、Json是一种独立于语言的数据格式,通过对数据的序列化操作,可用于不同语言之间数据的交换,也可以通过写*.json格式的文件,用于数据的存储。
2、Json中主要有Json数组和Json对象两种数据类型,格式举例如下:
(1)Json数组:
// 整形
[1,2,3,4,5]
// 相同类型字符串
["zhangsan", "lisi", "wangwu", "zhoaliu", "huangqi"]
//不同类型字符串
[3.1415926, 88, true, false, "NiHao,J
Qt框架中的JSON操作1 QJson库简介2 JSON 常用类3 简单的 JSON 对象
https://blog.csdn.net/penghejuan2012/article/details/82895492
https://blog.csdn.net/neochan1108/article/details/79590163
1 QJson库简介
在Qt库中,为JSON的相关操作提供了完整的类支持,包括QJsonValue,QJsonObject,QJsonArray,QJsonDocument和QJ
Qt之
JSON生成与
解析
Qt5中包含了处理
JSON的类,均以Q
Json开头(例如:Q
JsonDocument、Q
JsonArray、Q
JsonObject),在
QtCore模块中,不需要额外引入其它模块。
常用的
JSON 库
json.org 中介绍了
JSON 在各种语言中的应用,在 C/C++ 中比较常用的
JSON 库主要有以下几个:
JsonCpp
JsonCpp 是一个 C++ 用来处理
JSON 数据的开发包。
网址:http://
jsoncpp.sourceforge.net/
Qt支持处理JSON数据。JSON是一种对源自Javascript的对象数据进行编码的格式,但现在被广泛用作互联网上的数据交换格式。Qt中的JSON支持提供了一个易于使用的C++API来解析、修改和保存JSON数据。它还支持以二进制格式保存数据,这种格式可以直接“mmap”,并且访问速度非常快。JSON数据格式的更多详细信息可以在JSON中找到。
https://www.json.org/json-en.html和RFC-4627
中https://www.rfc-editor.org/rfc/rfc462