QT March 26, 2020

【QT】qt5.9解析和构建Json字符串

Words count 5.1k Reading time 5 mins. Read count 0

前言

QT5开始新增加几个相关类,专门用于处理JSON:

  1. QJsonDocument:provides a way to read and write JSON documents,用于读写json格式的文档
  2. QJsonArray:encapsulates a JSON array,封装json数组
  3. QJsonObject:encapsulates a JSON object,封装json对象
  4. QJsonValue:encapsulates a value in JSON,封装json的值
  5. QJsonParseError:used to report errors during JSON parsing,报告json解析过程中出现的异常

使用方式

  1. 直接使用QJsonObject封装或解析json对象,直接使用QJsonArray封装或解析json数组
  2. 使用QVariantMap封装或解析json对象,使用QVariantList封装或解析json数组

具体代码

  1. json对象的封装与解析

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // 使用QJsonObject
    QJsonObject json;
    json.insert("number", 1);
    json.insert("type", "QJsonObject");
    QJsonDocument document;
    document.setObject(json);
    QByteArray m_byteArray = document.toJson(QJsonDocument::Compact);
    QJsonParseError m_jsonError;
    QJsonDocument m_jsonDocument = QJsonDocument::fromJson(m_byteArray, &m_jsonError);

    // 使用QVariantMap
    QVariantMap m_map;
    m_map.insert("number", 1");
    m_map.insert("type", "QJsonObject");
    QJsonDocument m_jsonDocument = QJsonDocument::fromVariant(m_map);
  2. json数组的封装与解析

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    // 使用QJsonArray
    QJsonArray m_jsonArray;
    for(int i = 0; i < 3; i++) {
    QJsonObject jsonObject;
    jsonObject.insert("number", QString::number(i+1));
    jsonObject.insert("type", "QJsonObject");
    m_jsonArray.append(jsonObject);
    }
    QJsonDocument m_jsonDoc;
    m_jsonDoc.setArray(m_jsonArray);
    QByteArray m_byteArray = m_jsonDoc.toJson(QJsonDocument::Compact);
    QJsonParseError m_jsonError;
    QJsonDocument m_jsonDocument = QJsonDocument::fromJson(m_byteArray, &m_jsonError);

    // 使用QVariantList
    QVariantList m_list;
    for(int i = 0; i < 3; i++) {
    QVariantMap m_map;
    m_map.insert("number", 1);
    m_map.insert("type", "QJsonObject");
    m_list.append(m_map);
    }
    QJsonDocument m_jsonDocument = QJsonDocument::fromVariant(m_list);

其他注意事项

  1. QJsonDocument::Compact(紧凑型),这是转换后得到的字符串格式,另外还有QJsonDocument::Indented
  2. 解析后,使用前最好通过QJsonDocument::isNull()方法来判断当前document是否可用
0%