#include <QCoreApplication>
#include <QFile>
#include <QDebug>
#include <QJsonObject> // { }
#include <QJsonArray> // [ ]
#include <QJsonDocument> // 解析Json
#include <QJsonValue> // int float double bool null { } [ ]
#include <QJsonParseError>
/*
Qt 操作Json格式文件(创建、插入、解析、修改、删除)
https://blog.csdn.net/cpp_learner/article/details/118421096
{
"address": null,
"age": 26,
"color": [
"black",
"white"
],
"interest": {
"badminton": "羽毛球",
"basketball": "篮球"
},
"languages": {
"serialOne": {
"grade": 10,
"language": "汉语"
},
"serialTwo": {
"grade": 6,
"language": "英语"
}
},
"like": [
{
"game": "三国杀",
"price": 58.5
},
{
"game": "海岛奇兵",
"price": 66.65
}
],
"name": "老王",
"vip": true
}
*/
// 封装Json
void createJson()
{
//{ }
QJsonObject interestObj;// 定义 { } 对象
interestObj.insert("basketball", "篮球");// 插入元素,对应键值对
interestObj.insert("badminton", "羽毛球");// 插入元素,对应键值对
//[ ]
QJsonArray colorArray;// 定义 [ ] 对象
colorArray.append("black");// 往数组中添加元素
colorArray.append("white");// 往数组中添加元素
//[ { } { } ]
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);
//{ { } { } }
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;// 将json对象里的数据转换为字符串
doc.setObject(rootObject);// 将object设置为本文档的主要对象
QFile file("../js.json");
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
{
qDebug() << "错误:无法打开!";
return;//退出程序
}
QTextStream stream(&file);//文本流
stream.setCodec("UTF-8");// 设置写入编码是UTF8
stream << doc.toJson();//写入文件
file.close();
}
//解析Json
void analysisJson()
{
QFile file("../js.json");//加载文件
if(!file.open(QIODevice::ReadOnly))//只读形式打开文件
{
qDebug() << "无法打开json文件";//报错提示:无法打开json文件
return;//退出程序
}
QTextStream stream(&file);//文本流
stream.setCodec("UTF-8");//设置读取编码是UTF8
QString str = stream.readAll();//读取文件的全部内容到QString当中
file.close();//关闭文件
QJsonParseError jsonError;//QJsonParseError类用于在JSON解析期间报告错误。
QJsonDocument jsonDoc = QJsonDocument::fromJson(str.toUtf8(), &jsonError);//将json解析为UTF-8编码的json文档,并从中创建一个QJsonDocument。
if(jsonError.error != QJsonParseError::NoError)//判断是否解析失败,如果解析成功,返回QJsonDocument对象,否则返回null
{
qDebug() << "Json格式错误!" << jsonError.error;
return;
}
QJsonObject rootObj = jsonDoc.object();//获取根 { }
// 解析键值对
QJsonValue nameValue = rootObj.value("name");// 解析 String类型
qDebug() << "name = " << nameValue.toString();
QJsonValue ageValue = rootObj.value("age");// 解析 Int类型
qDebug() << "age = " << ageValue.toInt();
QJsonValue vipValue = rootObj.value("vip");// 解析 bool类型
qDebug() << "vip = " << vipValue.toBool();
QJsonValue addressValue = rootObj.value("address");// 解析 null类型
if (addressValue.type() == QJsonValue::Null)
{
qDebug() << "address = " << "null";
}
//解析对象 { }
QJsonValue interestValue = rootObj.value("interest");//解析对象 { }
if (interestValue.type() == QJsonValue::Object)// 判断是否是object类型
{
QJsonObject interestObj = interestValue.toObject();// 转换为QJsonObject类型
QJsonValue basketballValue = interestObj.value("basketball");// 解析 String类型
qDebug() << "basketball = " << basketballValue.toString();
QJsonValue badmintonValue = interestObj.value("badminton");// 解析 String类型
qDebug() << "badminton = " << badmintonValue.toString();
}
//解析对象 { }
QJsonValue colorValue = rootObj.value("color");//解析对象 { }
if (colorValue.type() == QJsonValue::Array)// 判断是否是Array类型
{
QJsonArray colorArray = colorValue.toArray();// 转换为QJsonArray类型
for (int i = 0; i < colorArray.size(); i++)
{
QJsonValue color = colorArray.at(i);
qDebug() << "color = " << color.toString();// 解析 String类型
}
}
//解析数组中的对象 [ { } ]
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);// 获取数组的第一个元素,类型是QJsonValue
if (likeValueChild.type() == QJsonValue::Object)// 判断是不是对象类型
{
QJsonObject likeObj = likeValueChild.toObject();// 转换成对象类型
QJsonValue gameLikeValue = likeObj.value("game");// 最后通过value函数就可以获取到值了,解析成功!
qDebug() << "game = " << gameLikeValue.toString();
QJsonValue priceLikeValue = likeObj.value("price");// 解析 Double类型
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();// 最后转换�
没有合适的资源?快使用搜索试试~ 我知道了~
QT纯C++实现JSON的封装、解析、修改、删除!
共4个文件
user:1个
pro:1个
json:1个
需积分: 12 7 下载量 120 浏览量
2023-04-08
15:17:38
上传
评论 2
收藏 6KB 7Z 举报
温馨提示
QT纯C++实现JSON的封装、解析、修改、删除!
资源推荐
资源详情
资源评论
收起资源包目录
QT_Json.7z (4个子文件)
QT_Json
build-QT_Json-Desktop_Qt_5_12_2_MinGW_32_bit-Debug
QT_Json
QT_Json.pro.user 44KB
main.cpp 16KB
QT_Json.pro 904B
js.json 289B
共 4 条
- 1
资源评论
XHR-想象之中
- 粉丝: 65
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功