Qt操作json文件
json 数据
在Qt中常见的数据传输格式为 xml 与 json 这个两种,其中 xml 在1996年提出是一种出现时间相对较久的文件格式,与2002年提出的json相比,他可以标注数据的一些属性,并且可以直接被html识别。相比较来说json就是比较简洁,人的可读性更强。更适合用来传输数据。
json格式:
标准格式:
#JSON字符串 {"name":"jobs"} #JSON布尔:必须小写的true和false {"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(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
2020-03-03 Qt开启多线程QThread
2019-03-03 Mac开启HIDPi