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 {
    // 检查错误类型
}

 

posted @ 2020-06-28 17:58  祁峰_1024  阅读(375)  评论(0编辑  收藏  举报