Qt之JSON语法以及简单的使用

    科技2024-03-26  92

    1、JSON语法

    JSON 语法是 JavaScript 对象表示语法的子集。

    1.1、JSON语法规则

    数据在名称/值对中,由冒号: 分割,书写格式为:key : value数据和数据之间由逗号分隔,书写格式为:{key1 : value1,key2 : value2,key3 : value3}大括号 {} 保存对象,书写格式为:{key1 : value1,key2 : value2,key3 : value3}中括号 [] 保存数组,数组可以包含多个对象,书写格式为:[{key1 : value1,key2 : value2},{key11 : value11,key21 : value21}]JSON 对象使用在大括号({})中书写。对象可以包含多个 key/value(键/值)对。key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。JSON对象可嵌套,JSON对象中可以包含其他JSON对象JSON数组可嵌套,JSON数组中可以包含其他JSON数组或者对象

    1.2、JSON值

    JSON 值可以是:

    数字(整数或浮点数),例如:{"age": 12}字符串(在双引号中),例如:{"name": root}逻辑值(true 或 false),例如:{"error": true}数组(在中括号中),例如:{"name": root,"age":12}对象(在大括号中),例如:{"data" :[ {"name": root,"age":12},{"name": admin,"age":13}]}null ,例如:{"error_code": null}

    1.3、访问对象值

    myObj = { "name":"root", "age":12 }; x = myObj.name;//结果root x = myObj["name"];//结果root

    1.4、修改对象值

    myObj = { "name":"root", "age":12 }; x = myObj.name;//结果root myObj["name"] = "admin"; x = myObj.name;//结果admin

    1.5、删除对象属性

    delete myObj.name; delete myObj["name"];

     1.6、访问对象中的数组

    myObj = { "name":"root", "age":12 ,"phone":["1","0","0","8","6"]}; x = myObj.phone[0];//1 x = myObj.phone;//结果1,0,0,8,6

    1.7、修改对象中的数组

    myObj.phone[0] = "2";

    1.8、删除对象中的数组 

    delete myObj.phone[1];

    2、JSON和XML的区别

    2.1、JSON 与 XML 的相同之处:

    JSON 和 XML 数据都是 "自我描述" ,都易于理解。JSON 和 XML 数据都是有层次的结构JSON 和 XML 数据可以被大多数编程语言使用

    2.2、JSON 与 XML 的不同之处:

    JSON 不需要结束标签JSON 更加简短JSON 读写速度更快JSON 可以使用数组

    2.3、最JSON 与 XML 的大的不同是:

    XML 需要使用 XML 解析器来解析,JSON 可以使用标准的 JavaScript 函数来解析。

    JSON.parse(): 将一个 JSON 字符串转换为 JavaScript 对象。JSON.stringify(): 于将 JavaScript 值转换为 JSON 字符串。

    2.4、为什么 JSON 比 XML 更好?

    XML 比 JSON 更难解析。

    JSON 可以直接使用现有的 JavaScript 对象解析。

    针对 AJAX 应用,JSON 比 XML 数据加载更快,而且更简单:

    使用 XML

    获取 XML 文档使用 XML DOM 迭代循环文档接数据解析出来复制给变量

    使用 JSON

    获取 JSON 字符串JSON.Parse 解析 JSON 字符串

    3、Qt-JSON的使用

    qt的json的使用会与json教程的语法有点出入,但是本质只是不同编译器对其进行的封装

    3.1、Qt中的提供的JSON相关类:

    3.1.1、QJsonDocument

    QJsonDocument既可以从一个基于文本表示的UTF-8编码,又可以从Qt自己的二进制格式读取和写入这个文件。JSON文档可以从它的基于文本的表示使用QJsonDocument::fromJson()转换为QJsonDocument,用.toJSON()将其转换回文字。解析器非常快速和高效,将JSON转换为二进制表示。

    3.1.2、QJsonObject

    QJsonObject类用于封装JSON对象。JSON对象是键值对,其中键是唯一的字符串,其值由QJsonValue代表。一个QJsonObject可以从QVariantMap转换/被转换。

    3.1.3、QJsonArray

    QJsonArray类用于封装JSON数组。一个JSON数组列表值。该列表可以通过从阵列插入和移除QJsonValue的操纵。一个QJsonArray可以从QVariantList转换为/被转换。QJsonDocument有效解析后的文档可以使用!iSNull()判断。使用isArray()和isObject()来判断是否包含一个数组或对象。文档中包含的数组或对象可以使用array()或object()进行检索,然后读取或操纵。

    3.1.4、QJsonParseError

    用于在JSON解析期间报告错误

    3.1.5、QJsonValue

    代表具体的值,值可以是QJsonObject,也可以是QJsonArray(可用isObject()和isArray()方法来判断),或者其他类型

    3.2、QJsonObject代码

    #include <QApplication> #include <QDebug> #include <QJsonObject> #include <QJsonDocument> int main(int argc, char *argv[]) { QApplication a(argc, argv); /*生成Json*/ QJsonObject json; json.insert("name", QString("Qt")); json.insert("version", 5); json.insert("windows", true); QJsonDocument document; document.setObject(json); QByteArray byte_array = document.toJson(QJsonDocument::Compact); QString json_str(byte_array); qDebug()<<"生成Json:"<<json_str; /*解析Json*/ QJsonParseError json_error; QJsonDocument parse_doucment = QJsonDocument::fromJson(byte_array, &json_error); if(json_error.error == QJsonParseError::NoError) { if(parse_doucment.isObject()) //判断是否是对象 { QJsonObject obj = parse_doucment.object(); if(obj.contains("name")) { QJsonValue name_value = obj.take("name"); if(name_value.isString()) { QString name = name_value.toString(); qDebug()<<"name "<<name; } } if(obj.contains("version")) { QJsonValue version_value = obj.take("version"); if(version_value.isDouble()) { int version = version_value.toVariant().toInt(); qDebug()<<"version "<<version; } } if(obj.contains("windows")) { QJsonValue version_value = obj.take("windows"); if(version_value.isBool()) { bool flag = version_value.toBool(); qDebug()<<"windows "<<flag; } } } } return a.exec(); }

    3.3、QJsonArray代码

    #include <QApplication> #include <QDebug> #include <QJsonArray> #include <QJsonValue> #include <QJsonDocument> int main(int argc, char *argv[]) { QApplication a(argc, argv); /*生成Json*/ QJsonArray json; json.insert(0, QString("Qt")); json.insert(1, QString("version")); json.insert(2, true); QJsonDocument document; document.setArray(json); QByteArray byte_array = document.toJson(QJsonDocument::Compact); QString json_str(byte_array); qDebug()<<"生成Json:"<<json_str; /*解析Json*/ QJsonParseError json_error; QJsonDocument parse_doucment = QJsonDocument::fromJson(byte_array, &json_error); if (json_error.error == QJsonParseError::NoError) { if (parse_doucment.isArray()) //判断是否是数组 { QJsonArray array = parse_doucment.array(); int size = array.size(); for (int i=0; i < size; i++) { QJsonValue value = array.at(i); if (value.isString()) { QString name = value.toString(); qDebug()<<"数组索引:"<<i<<", name:"<<name; } else if (value.isBool()) { bool flag = value.toBool(); qDebug()<<"数组索引:"<<i<<", flag:"<<flag; } } } } return a.exec(); }

     

    抄袭:Qt之简单使用Json、菜鸟教程

     

     

     

    Processed: 0.035, SQL: 8