首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QJsonObject返回null

QJsonObject返回null
EN

Stack Overflow用户
提问于 2019-04-13 06:33:43
回答 1查看 785关注 0票数 1

QJsonObject不会正常返回值。

json

代码语言:javascript
复制
{"response":{"header":{"resultCode":"0000","resultMsg":"OK"},"body":{"items":{"item":[{"baseDate":20190413,"baseTime":"0600","category":"PTY","nx":55,"ny":127,"obsrValue":0},{"baseDate":20190413,"baseTime":"0600","category":"REH","nx":55,"ny":127,"obsrValue":-998},{"baseDate":20190413,"baseTime":"0600","category":"RN1","nx":55,"ny":127,"obsrValue":0},{"baseDate":20190413,"baseTime":"0600","category":"T1H","nx":55,"ny":127,"obsrValue":6.3},{"baseDate":20190413,"baseTime":"0600","category":"UUU","nx":55,"ny":127,"obsrValue":0},{"baseDate":20190413,"baseTime":"0600","category":"VEC","nx":55,"ny":127,"obsrValue":0},{"baseDate":20190413,"baseTime":"0600","category":"VVV","nx":55,"ny":127,"obsrValue":0},{"baseDate":20190413,"baseTime":"0600","category":"WSD","nx":55,"ny":127,"obsrValue":0}]},"numOfRows":10,"pageNo":1,"totalCount":8}}}

代码

代码语言:javascript
复制
QJsonDocument jsonDoc = QJsonDocument::fromJson(reply->readAll());
        QJsonObject jsonObj = jsonDoc.object();
        QString status = jsonObj["resultMsg"].toString(); // empty
        QJsonArray items = jsonObj["item"].toArray();     // null

我希望OK存储在状态变量中,但它没有包含任何内容。

items变量存储null。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-13 06:54:58

为了更好地理解,最好使用以下格式查看json:

代码语言:javascript
复制
{
    "response": {
        "header": {
            "resultCode": "0000",
            "resultMsg": "OK"
        },
        "body": {
            "items": {
                "item": [{
                    "baseDate": 20190413,
                    "baseTime": "0600",
                    "category": "PTY",
                    "nx": 55,
                    "ny": 127,
                    "obsrValue": 0
                }, {
                    "baseDate": 20190413,
                    "baseTime": "0600",
                    "category": "REH",
                    "nx": 55,
                    "ny": 127,
                    "obsrValue": -998
                }, {
                    "baseDate": 20190413,
                    "baseTime": "0600",
                    "category": "RN1",
                    "nx": 55,
                    "ny": 127,
                    "obsrValue": 0
                }, {
                    "baseDate": 20190413,
                    "baseTime": "0600",
                    "category": "T1H",
                    "nx": 55,
                    "ny": 127,
                    "obsrValue": 6.3
                }, {
                    "baseDate": 20190413,
                    "baseTime": "0600",
                    "category": "UUU",
                    "nx": 55,
                    "ny": 127,
                    "obsrValue": 0
                }, {
                    "baseDate": 20190413,
                    "baseTime": "0600",
                    "category": "VEC",
                    "nx": 55,
                    "ny": 127,
                    "obsrValue": 0
                }, {
                    "baseDate": 20190413,
                    "baseTime": "0600",
                    "category": "VVV",
                    "nx": 55,
                    "ny": 127,
                    "obsrValue": 0
                }, {
                    "baseDate": 20190413,
                    "baseTime": "0600",
                    "category": "WSD",
                    "nx": 55,
                    "ny": 127,
                    "obsrValue": 0
                }]
            },
            "numOfRows": 10,
            "pageNo": 1,
            "totalCount": 8
        }
    }
}

Json是一种格式,其中每个元素都有层次结构,也就是说,要访问一个元素,您必须通过父元素进行访问。

在resultMsg的情况下,您必须访问response -> header-> resultMsg。在这种情况下,您必须访问response -> body-> items-> item

考虑到上述情况,解决方案是:

代码语言:javascript
复制
QJsonArray item_array;
QString status;

QJsonDocument jsonDoc = QJsonDocument::fromJson(reply->readAll());

QJsonObject jsonObj = jsonDoc.object();
if(jsonObj.contains("response")){
    QJsonObject response_obj = jsonObj["response"].toObject();
    if(response_obj.contains("header")){
        QJsonObject header_obj = response_obj["header"].toObject();
        if(header_obj.contains("resultMsg")){
            status = header_obj["resultMsg"].toString();
        }
    }
    if(response_obj.contains("body")){
        QJsonObject body_obj = response_obj["body"].toObject();
        if(body_obj.contains("items")){
            QJsonObject items_obj = body_obj["items"].toObject();
            if(items_obj.contains("item")){
               item_array = items_obj["item"].toArray();
            }
        }
    }
}
qDebug()<< "status:" << status;
qDebug()<< "item:" << item_array;

输出:

代码语言:javascript
复制
status: "OK"
item: QJsonArray([{"baseDate":20190413,"baseTime":"0600","category":"PTY","nx":55,"ny":127,"obsrValue":0},{"baseDate":20190413,"baseTime":"0600","category":"REH","nx":55,"ny":127,"obsrValue":-998},{"baseDate":20190413,"baseTime":"0600","category":"RN1","nx":55,"ny":127,"obsrValue":0},{"baseDate":20190413,"baseTime":"0600","category":"T1H","nx":55,"ny":127,"obsrValue":6.3},{"baseDate":20190413,"baseTime":"0600","category":"UUU","nx":55,"ny":127,"obsrValue":0},{"baseDate":20190413,"baseTime":"0600","category":"VEC","nx":55,"ny":127,"obsrValue":0},{"baseDate":20190413,"baseTime":"0600","category":"VVV","nx":55,"ny":127,"obsrValue":0},{"baseDate":20190413,"baseTime":"0600","category":"WSD","nx":55,"ny":127,"obsrValue":0}])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55660212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档