做美食网站的图片,iis 配置网站 404页面,大气企业网站,郑州网站建设规划目录
QJsonValue QJsonObject QJsonArray
QJsonDocument
案例#xff1a; Qt 5.0开始提供了对Json的支持#xff0c;我们可以直接使用Qt提供的Json类进行数据的组织和解析#xff0c;下面介绍4个常用的类。 QJsonValue
该类封装了JSON支持的数据类型。 布尔类型#xf…目录
QJsonValue QJsonObject QJsonArray
QJsonDocument
案例 Qt 5.0开始提供了对Json的支持我们可以直接使用Qt提供的Json类进行数据的组织和解析下面介绍4个常用的类。 QJsonValue
该类封装了JSON支持的数据类型。 布尔类型QJsonValue::Bool浮点类型包括整形 QJsonValue::Double字符串类型 QJsonValue::StringJson数组类型 QJsonValue::ArrayJson对象类型QJsonValue::Object空值类型 QJsonValue::Null 值的类型可以使用 type 或 isBool、isString 等访问器进行查询。同样可以使用 toBool、toString 等将值转换为存储在其中的类型。 QJsonObject
JSON 对象是键值对的列表其中键是唯一字符串值由 QJsonValue 表示。
API的使用类似于c的STL库支持插入删除查找等也有迭代器。例如 QJsonValue QJsonObject::value(QLatin1String key) const; // 字符串不支持中文 QJsonValue QJsonObject::take(const QString key); // 返回key对应的value值 QStringList QJsonObject::keys() const;//先得到对象中所有的键值, 在遍历键值列表, 通过key得到value值 QJsonArray
JSON 数组是一个值列表。可以通过在数组中插入和删除 QJsonValue 来操作该列表。
使用方法也类似与STL中vector等有迭代器。例如
构造函数 QJsonDocument
它封装了一个完整的JSON文档并且可以从UTF-8编码的基于文本的表示以及Qt自己的二进制格式读取和写入该文档。QJsonObject 和 QJsonArray这两个对象中的数据是不能直接转换为字符串类型的如果要进行数据传输或者数据的持久化我们需要通过一个Json文档类进行二者之间的转换。
构造函数 将文件对象中的数据进行序列化
// 二进制格式的json字符串 QByteArray QJsonDocument::toBinaryData() const; // 文本格式 QByteArray QJsonDocument::toJson(JsonFormat format Indented) const;
字符串 QJsonObject 或者 QJsonArray
1.将得到的Json格式字符串通过 QJsonDocument 类的静态函数转换为QJsonDocument类对象 [static] QJsonDocument QJsonDocument::fromBinaryData(const QByteArray data, DataValidation validation Validate); // 参数文件格式的json字符串 [static] QJsonDocument QJsonDocument::fromJson(const QByteArray json, QJsonParseError *error Q_NULLPTR); 2.将文档对象转换为json数组/对象 // 判断文档对象中存储的数据是不是数组 bool QJsonDocument::isArray() const; // 判断文档对象中存储的数据是不是json对象 bool QJsonDocument::isObject() const // 文档对象中的数据转换为json对象 QJsonObject QJsonDocument::object() const; // 文档对象中的数据转换为json数组 QJsonArray QJsonDocument::array() const; 3.通过调用QJsonArray , QJsonObject 类提供的 API 读出存储在对象中的数据 案例
void MainWindow::write()
{QJsonObject obj;//存储的是键值对key值是字符串value是QJsonValue支持的类型,也可以是 QJsonArrayQJsonObject嵌套使用obj.insert(Name, Ace);//隐式类型转换obj.insert(Sex, man);obj.insert(Age, 20);QJsonObject subObj;subObj.insert(Father, Gol·D·Roger);subObj.insert(Mother, Portgas·D·Rouge);QJsonArray array;//JSON 数组是一个值列表。可以通过在数组中插入和删除 QJsonValue 来操作该列表array.append(Sabo);array.append(Monkey D. Luffy);subObj.insert(Brother, array);obj.insert(Family, subObj);obj.insert(IsAlive, false);obj.insert(Comment, yyds);QJsonDocument doc(obj);QByteArray json doc.toJson();QFile file(d:\\ace.json);file.open(QFile::WriteOnly);file.write(json);file.close();}void MainWindow::read()
{QFile file(d:\\ace.json);file.open(QFile::ReadOnly);QByteArray json file.readAll();file.close();QJsonDocument doc QJsonDocument::fromJson(json);if(doc.isObject())//该数据是 QJsonObject数据{QJsonObject obj doc.object();QStringList keys obj.keys();//获取对应的key值for(int i0; ikeys.size(); i){QString key keys.at(i);QJsonValue value obj.value(key);//通过key值查找value值if(value.isBool()){qDebug() key : value.toBool();}if(value.isString()){qDebug() key : value.toString();}if(value.isDouble()){qDebug() key : value.toInt();}if(value.isObject()){qDebug() key :;again(value);}}}}void MainWindow::again( QJsonValue doc)
{if(doc.isObject())//该数据是 QJsonObject数据{QJsonObject subObj doc.toObject();QStringList keys subObj.keys();//获取对应的key值for(int i0; ikeys.size(); i){QString key keys.at(i);QJsonValue value subObj.value(key);//通过key值查找value值if(value.isBool()){qDebug() key : value.toBool();}if(value.isString()){qDebug() key : value.toString();}if(value.isDouble()){qDebug() key : value.toInt();}if(value.isArray()){qDebug() key :;QJsonArray array value.toArray();for(int i0;iarray.size();i){qDebug()array[i].toString();//以提前知道数组存储的是字符串不然还要再判断}}if(value.isObject())//继续嵌套{qDebug() key :;again(value);}}}