json简单理解和qt中的使用

Posted 活人就是矫情

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了json简单理解和qt中的使用相关的知识,希望对你有一定的参考价值。

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

 

以下内容例子部分摘自豆子的qt学习之路

 

看一个例子

{
  "encoding" : "UTF-8",
  "plug-ins" : [
      "python",
      "c++",
      "ruby"
      ],
  "indent" : { "length" : 3, "use_space" : true }
}

 

用一张图来解释以下这个例子

 

 

然后找到天气网站上看看真实的例子

http://wthrcdn.etouch.cn/weather_mini?city=深圳

 

打开网页是这个样子

 

 

 

然后我们用刚才的学会的json语法把他切分一下

{
    "data":{
            "yesterday":{"date":"27日星期六","high":"高温 32℃","fx":"南风","low":"低温 28℃","fl":"<![CDATA[3级]]>","type":"多云"},
            "city":"深圳",
            "forecast":[
                        {"date":"28日星期天","high":"高温 32℃","fengli":"<![CDATA[3级]]>","low":"低温 28℃","fengxiang":"南风","type":"多云"},
                        {"date":"29日星期一","high":"高温 33℃","fengli":"<![CDATA[3级]]>","low":"低温 28℃","fengxiang":"南风","type":"阴"},
                        {"date":"30日星期二","high":"高温 33℃","fengli":"<![CDATA[3级]]>","low":"低温 28℃","fengxiang":"南风","type":"中雨"},
                        {"date":"1日星期三","high":"高温 32℃","fengli":"<![CDATA[2级]]>","low":"低温 27℃","fengxiang":"南风","type":"小雨"},
                        {"date":"2日星期四","high":"高温 32℃","fengli":"<![CDATA[3级]]>","low":"低温 27℃","fengxiang":"南风","type":"小雨"}
                        ],
            "ganmao":"感冒低发期,天气舒适,请注意多吃蔬菜水果,多喝水哦。",
            "wendu":"32"
            },
    "status":1000,
    "desc":"OK"
}

(我理解是这样的,如果不对还请评论指出。。

这个语法就是对象 字符串 数组 数字的一个结合,只有这四种数据类型

 

然后用QJsonParseError解析

 

 

在看刚才那个例子

QString json("{"
        "\\"encoding\\" : \\"UTF-8\\","
        "\\"plug-ins\\" : ["
        "\\"python\\","
        "\\"c++\\","
        "\\"ruby\\""
        "],"
        "\\"indent\\" : { \\"length\\" : 3, \\"use_space\\" : true }"
        "}");
QJsonParseError error;
QJsonDocument jsonDocument = QJsonDocument::fromJson(json.toUtf8(), &error);
if (error.error == QJsonParseError::NoError) {
    if (jsonDocument.isObject()) {
        QVariantMap result = jsonDocument.toVariant().toMap();
        qDebug() << "encoding:" << result["encoding"].toString();
        qDebug() << "plugins:";

        foreach (QVariant plugin, result["plug-ins"].toList()) {
            qDebug() << "\\t-" << plugin.toString();
        }

        QVariantMap nestedMap = result["indent"].toMap();
        qDebug() << "length:" << nestedMap["length"].toInt();
        qDebug() << "use_space:" << nestedMap["use_space"].toBool();
    }
} else {
    qFatal(error.errorString().toUtf8().constData());
    exit(1);
}

 

还是一开始的那段json

 

 

模板如下:

// 1. 创建 QJsonParseError 对象,用来获取解析结果
QJsonParseError error;
// 2. 使用静态函数获取 QJsonDocument 对象
QJsonDocument jsonDocument = QJsonDocument::fromJson(json.toUtf8(), &error);
// 3. 根据解析结果进行处理
if (error.error == QJsonParseError::NoError) {
    if (!(jsonDocument.isNull() || jsonDocument.isEmpty())) {
        if (jsonDocument.isObject()) {
            // ...
        } else if (jsonDocument.isArray()) {
            // ...
        }
    }
} else {
    // 检查错误类型
}

 

以上是关于json简单理解和qt中的使用的主要内容,如果未能解决你的问题,请参考以下文章

如何从片段中的 JSON 响应中的对象获取数据

QT 实用代码片段

Qt 的最佳 JSON 解析器? [关闭]

在Qt中如何通过QJson 解析json数据

使用 json rereiver php mysql 在片段中填充列表视图

调用模板化成员函数:帮助我理解另一个 *** 帖子中的代码片段