Qt操作json文件

json 数据

在Qt中常见的数据传输格式为 xml 与 json 这个两种,其中 xml 在1996年提出是一种出现时间相对较久的文件格式,与2002年提出的json相比,他可以标注数据的一些属性,并且可以直接被html识别。相比较来说json就是比较简洁,人的可读性更强。更适合用来传输数据。

json格式:

标准格式:

#JSON字符串
{"name":"jobs"}
#JSON布尔:必须小写的truefalse
{"bool":true}
#JSON空:必须小写的null
{"object":null}

示例:

{
"name" : "mil",
"age" : 15,
"language": ["zh", "eng"],
"course" : [{
"name" : 'math",
"score": 66
},{
"name" : "eng",
"score": 99
}]
}

在Qt中 使用QJsonDocument读写json文件。

类说明
QJsonDocument 读写json文档
QJsonObject 封装Json对象
QJsonArry 封装json数组
QJosnValue 封装json值,int,flot,double,{},[]
QJsonObject
QJsonParseError 所选json处理过程中出现的错误

封装 json

void Widget::pkjson()
{
QFile jsfile("../test_1.json");
// ---> 封装/保存 json
QJsonObject rootObj;
QJsonObject professionalObj;
professionalObj.insert("english", 4);
QJsonArray languageArr;
languageArr.append("c");
languageArr.append("c++");
rootObj.insert("name","milo");
rootObj.insert("age",80);
rootObj.insert("professional", professionalObj);
rootObj.insert("phone","milo");
rootObj.insert("language", languageArr);
rootObj.insert("hard","milo");
rootObj.insert("hot","milo");
QJsonDocument jdoc(rootObj);
// ---> 打开文件并向文件中添加内容
if(jsfile.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append)) {
QTextStream js(&jsfile);
js<< jdoc.toJson();
jsfile.close();
} else {
cout << "打开失败";
}
}

解析 json

void Widget::exjson()
{
// ---> 解包json
QFile jsfile("../test_1.json");
if(jsfile.open(QIODevice::ReadOnly)){
// ---> 设置解析报错
QJsonParseError err;
// ---> 解释json文件
QJsonDocument jsdoc = QJsonDocument::fromJson(jsfile.readAll(), &err);
if(err.error!=QJsonParseError::NoError){
// ---> 如果有报错
cout << "json 格式错误!";
return;
} else {
// ---> 读取根目录
QJsonObject rootObj = jsdoc.object();
// ---> 读取 key = name 的值
cout << rootObj.value("name").toString();
QJsonArray lanArr = rootObj.value("language").toArray();
cout << lanArr.at(0).toString() << lanArr.at(1).toString();
// ---> 判断key的类型 , 是arry 还是 obj
if(rootObj.value("professional").type() == QJsonValue::Object){
cout << "这个key的类型是 obj";
}
}
jsfile.close();
}
}
posted @   看不见的R  阅读(948)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
历史上的今天:
2020-03-03 Qt开启多线程QThread
2019-03-03 Mac开启HIDPi
点击右上角即可分享
微信分享提示