【问题标题】:QJsonDocument::array() and QJsonDocument::object()QJsonDocument::array() 和 QJsonDocument::object()
【发布时间】:2016-08-05 07:30:42
【问题描述】:

我正在阅读QJsonDocument documentation 并使用QJsonDocument 与以下行:

emit this->ueSignalNewDataArrivedPlaces(QJsonDocument::fromBinaryData(incomingData[0].toByteArray()));

我不明白,在这行之后,我应该使用 QJsonDocument::array()还是QJsonDocument::object(),即QJsonDocument在什么情况下创建array以及在什么情况下创建object

【问题讨论】:

    标签: qt qjson


    【解决方案1】:

    一个JSON数组是一个有序列表,写成:

    [ <item1>, <item2>, <item3> ]
    

    而 JSON 对象是一个命名列表,写成:

    {
        <name1>: <item1>,
        <name2>: <item2>
    }
    

    在 Qt 中,QJsonArray 等效于 QVariantList (QList&lt;QVariant&gt;),QJsonObject 等效于 QVariantMap (QMap&lt;QString, QVariant&gt;)。

    你必须使用哪一个取决于你正在解析的文件。 以维基百科为例:

    {
      "firstName": "John",
      "lastName": "Smith",
      "isAlive": true,
      "age": 25,
      "address": {
        "streetAddress": "21 2nd Street",
        "city": "New York",
        "state": "NY",
        "postalCode": "10021-3100"
      },
      "phoneNumbers": [
        {
          "type": "home",
          "number": "212 555-1234"
        },
        {
          "type": "office",
          "number": "646 555-4567"
        },
        {
          "type": "mobile",
          "number": "123 456-7890"
        }
      ],
      "children": [],
      "spouse": null
    }
    

    您可以使用QJsonArray 来获取phoneNumbers 的列表,phoneNumbers 的每个元素都是一个QJsonObject,带有两个命名值:typenumber

    如果在您的代码中您需要操作 JSON 元素但您不知道它的类型,您可以使用 QJsonValue,它是以下之一:QJsonObjectQJsonArraybooldoubleQString

    【讨论】:

    • 嗯,就是这样!如果json 数据源仅包含“一条记录”,我认为创建QJsonObject 而不是QJsonArray
    • 如果isObject()isArray() 都返回true,我可以确定“无效”json 格式吗?
    • @Kernelpanic 您不能同时返回 true。您的根元素不能既是数组又是对象。如果你想要证明,在 Qt 源代码中 QJsonDocument::isArray() 调用 QJsonPrivate::Base::isArray(),它被实现为内联 bool isArray() const { return !isObject(); }。您还可以使用QJsonDocument::isNull()QJsonDocument::fromJson() 的第二个参数检查无效的JSON。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 2017-11-16
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多