Qt操作Json小结
Qt操作Json
1、QJsonDocument
1、详细说明
QJsonDocument类提供了读写JSON文档的方法。
QJsonDocument是一个封装了完整JSON文档的类,可以从基于UTF-8编码的文本或者Qt的二进制格式读写此文档。
可以使用QJsonDocument :: fromJson()将JSON文档从其基于文本的表示转换为QJsonDocument。 toJson()将其转换回文本。 解析器非常快速有效,并将JSON转换为Qt使用的二进制表示。
可以使用!isNull()查询已解析文档的有效性
可以使用isArray()和isObject()查询文档是否包含数组或对象。 可以使用array()或object()检索文档中包含的数组或对象,然后进行读取或操作。
还可以使用fromBinaryData()或fromRawData()从存储的二进制表示创建文档。
2、QJsonArray
1、详细说明
QJsonArray 类封装了一个 JSON 数组。
JSON 数组是值的列表。列表可以被操作,通过从数组中插入和删除 QJsonValue 。
一个 QJsonArray 可以和一个 QVariantList 相互转换。可以使用 size() 来查询条目的数量,通过 insert() 在指定索引处插入值,removeAt() 来删除指定索引的值。支持标准C++的迭代器。
QJsonArray是一个隐式共享类,只要它没有被修改,就会与创建它的文档共享数据。
QJsonArray对象和基于文本的JSON可以通过QJsonDocument进行相互转换。
3、QJsonObject
1、详细说明
QJsonObject 类封装了一个 JSON 对象。
一个 JSON 对象是一个“key/value 对”列表,key 是独一无二的字符串,value 由一个 QJsonValue 表示。
一个 QJsonObject 可以和一个 QVariantMap 相互转换。可以使用 size() 来查询“key/value 对”的数量,通过 insert() 插入“key/value 对”, remove() 删除指定的 key。
QJsonObject是一个隐式共享类,只要它没有被修改,就会与创建它的文档共享数据。
QJsonObject对象和基于文本的JSON可以通过QJsonDocument进行相互转换。
4、QJsonParseError
1、详细说明
QJsonParseError 类用于在 JSON 解析中报告错误。
5、QJsonValue
1、详细说明
QJsonValue 类封装了一个值。
JSON 中的值有 6 种基本数据类型:
bool(QJsonValue::Bool)
double(QJsonValue::Double)
string(QJsonValue::String)
array(QJsonValue::Array)
object(QJsonValue::Object)
null(QJsonValue::Null)
一个值可以由任何上述数据类型表示。此外,QJsonValue 有一个特殊的标记来表示未定义的值,可以使用 isUndefined() 查询。
值的类型可以通过 type() 或 isBool()、isString() 等访问函数查询。同样地,值可以通过 toBool()、toString() 等函数转化成相应的存储类型。
与QVariant相反,不会尝试进行任何隐式类型转换。 这意味着转换为未存储在值中的类型将返回默认的构造返回值。
6、实例
生产一下Json文档:
{
"heartData": [
{
"I1": {
"quality": 18.2,
"temp": 25
}
},
{
"I2": {
"quality": 2000,
"temp": 20
}
},
{
"RO Rejection": {
"value": 98
}
},
{
"TOC": {
"value": 3
}
}
]
}
生产代码:
void DJson::clearJsonObject(QJsonObject &object)
{
QStringList strList = object.keys();
for(int i = 0; i < strList.size(); ++i)
{
object.remove(strList.at(i));
}
}
void DJson::createJsonFile(const QString &fileName)
{
QJsonArray jsonArray;
QJsonObject rootObject;
QJsonObject branchObject;
QJsonObject leafObject;
leafObject.insert("quality", 18.2);
leafObject.insert("temp", 25.0);
branchObject.insert("I1", leafObject);
jsonArray.append(branchObject);
clearJsonObject(leafObject);
clearJsonObject(branchObject);
leafObject.insert("quality", 2000);
leafObject.insert("temp", 20.0);
branchObject.insert("I2", leafObject);
jsonArray.append(branchObject);
clearJsonObject(leafObject);
clearJsonObject(branchObject);
leafObject.insert("value", 98);
branchObject.insert("RO Rejection", leafObject);
jsonArray.append(branchObject);
clearJsonObject(leafObject);
clearJsonObject(branchObject);
leafObject.insert("value", 3);
branchObject.insert("TOC", leafObject);
jsonArray.append(branchObject);
clearJsonObject(leafObject);
clearJsonObject(branchObject);
rootObject.insert("heartData", jsonArray);
QJsonDocument jsonDocument;
jsonDocument.setObject(rootObject);
QByteArray byteArray = jsonDocument.toJson(QJsonDocument::Indented);
QFile file(fileName);
if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
qDebug() << QString("fail to open the file: %1, %2, %3").arg(__FILE__).arg(__LINE__).arg(__FUNCTION__);
return;
}
QTextStream out(&file);
out << byteArray;
file.close();
qDebug() << byteArray;
}
解析:
void DJson::initList()
{
m_iList << "I1" << "I2" << "I3" << "I4" << "I5";
m_vList << "RO Rejection" << "TOC";
}
void DJson::parseJsonFile(const QString &fileName)
{
QFile file(fileName);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug() << QString("fail to open the file: %1, %2, %3").arg(__FILE__).arg(__LINE__).arg(__FUNCTION__);
return;
}
QByteArray array = file.readAll();
QJsonParseError jsonParseError;
QJsonDocument jsonDocument(QJsonDocument::fromJson(array, &jsonParseError));
if(QJsonParseError::NoError != jsonParseError.error)
{
qDebug() << QString("JsonParseError: %1").arg(jsonParseError.errorString());
return;
}
QJsonObject rootObject = jsonDocument.object();
if(!rootObject.keys().contains("heartData"))
{
qDebug() << "No target value";
return;
}
qDebug() << rootObject.keys();
QJsonValue jsonValue = rootObject.value("heartData");
if(!jsonValue.isArray())
{
qDebug() << "No target array";
}
QJsonArray jsonArray = jsonValue.toArray();
for(auto iter = jsonArray.constBegin(); iter != jsonArray.constEnd(); ++iter)
{
parseJsonObject(iter);
}
qDebug() << rootObject.keys();
}
void DJson::parseJsonObject(QJsonArray::const_iterator iter)
{
QJsonObject jsonObject = (*iter).toObject();
for(int i = 0; i < m_iList.size(); ++i)
{
if(jsonObject.keys().contains(m_iList.at(i)))
{
parseJsonObjectI(jsonObject);
return;
}
}
for(int i = 0; i < m_vList.size(); ++i)
{
if(jsonObject.keys().contains(m_vList.at(i)))
{
parseJsonObjectV(jsonObject);
return;
}
}
}
void DJson::parseJsonObjectI(QJsonObject &object)
{
qDebug() << object.keys();
for(int i = 0; i < object.keys().size(); ++i)
{
QJsonValue jsonValue = object.value(object.keys().at(i));
if(jsonValue.isObject())
{
QJsonObject jsonObject = jsonValue.toObject();
if(jsonObject.keys().contains("quality"))
{
qDebug() << QString("%1 : %2").arg("quality").arg(jsonObject.value("quality").toDouble());
}
if(jsonObject.keys().contains("temp"))
{
qDebug() << QString("%1 : %2").arg("temp").arg(jsonObject.value("temp").toDouble());
}
}
}
qDebug() << object.keys();
}
void DJson::parseJsonObjectV(QJsonObject &object)
{
qDebug() << object.keys();
for(int i = 0; i < object.keys().size(); ++i)
{
QJsonValue jsonValue = object.value(object.keys().at(i));
if(jsonValue.isObject())
{
QJsonObject jsonObject = jsonValue.toObject();
if(jsonObject.keys().contains("value"))
{
qDebug() << QString("%1 : %2").arg("value").arg(jsonObject.value("value").toInt());
}
}
}
qDebug() << object.keys();
}
Qt操作Json小结的更多相关文章
- Qt读写Json
Qt操作Json 1.QJsonDocument 1.详细说明 QJsonDocument类提供了读写JSON文档的方法. QJsonDocument是一个封装了完整JSON文档的类,可以从基于UTF ...
- C#操作JSON
http://www.cnblogs.com/LiZhiW/p/3624729.html C#操作JSON 1. .NET对JSON的支持介绍............................. ...
- C#操作Json(转)
原文:http://wenku.baidu.com/link?url=3dlqKdF26ZdQIAcX9jvP2ZYEtl3J0sKOV8XuHQI0Rz4SjB9S46nqmGiMXUVQa_1Pm ...
- QJsonDocument实现Qt下JSON文档读写
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QJsonDocument实现Qt下JSON文档读写 本文地址:http://tech ...
- 让C#可以像Javascript一样操作Json
Json的简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了 ...
- JavaScript操作JSON的方法总结,JSON字符串转换为JSON对象
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...
- C# 技巧(3) C# 操作 JSON
RestAPI中, 经常需要操作json字符串, 需要把json字符串"反序列化"成一个对象, 也需要把一个对象"序列化"成一字符串. C# 操作json, ...
- JS操作JSON总结
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...
- jsoncpp操作 json
jsoncpp操作 json 博客分类: c/c++ object-c 之 iphone #include <iostream> //#include "json/json. ...
随机推荐
- 【前端必会】使用indexedDB,降低环境搭建成本
背景 学习前端新框架.新技术.如果需要做一些数据库的操作来增加demo的体验(CURD流程可以让演示的体验根据丝滑) 最开始的时候一个演示程序我们会调用后台,这样其实有一点弊端,就是增加了开发和维护成 ...
- NSIS检测到窗口最小化闪烁提示
#检测到窗口为最小化时闪烁提示 !include nsDialogs.nsh #编写:水晶石 Name "IsIconic Example" OutFile "IsIco ...
- jq修改多个css样式
$("#xxx").css({"属性名称": "属性值", "属性名称": "属性值" });
- 关于Linux中使用bc命令计算圆周率
Linux系统中,我们可以安装bc计算器用来计算pi值(π圆周率) 在玩的同时,这可以从某些方面反映出一个CPU的运算能力,在命令最前加上time即可 如果系统中没有bc命令,需要先进行安装:yum ...
- Python解决千年虫问题
#避免千年虫(日期bug)问题 千年虫:部分计算机程序使用年份后两位作为记录年份,当日期跳转到00时候,默认会解析为1900,造成系统紊乱 lst=[45,89,1998,00,75,33,1968, ...
- 11.MongoDB系列之连接副本集
1. Python连接副本集 from pymongo import MongoClient from bson.codec_options import CodecOptions from retr ...
- 齐博X1忘记管理员密码了怎么办?如何强制进后台?
当你忘记密码,或者是某些原因导致进不了后台的话,这个时候你修改一下根目录的admin.php文件,把文件第二行 //define('SUPER_ADMIN',true); 前面的 // 双斜杠删除,再 ...
- C语言两个升序递增链表逆序合并为一个降序递减链表,并去除重复元素
#include"stdafx.h" #include<stdlib.h> #define LEN sizeof(struct student) struct stud ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(31)-Fiddler如何抓取Android系统中Flutter应用程序的包
1.简介 Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面.Flutter应用程序是用Dart编写的,这是一种由Google在7年多前创建的语言.Flut ...
- 十五、资源控制之Deployment
资源控制器之Deployment Deployment 为 Pod 和 ReplicaSet 提供了一个声明式定义(declarative)方法,用来替代以前的ReplicationControlle ...