Qt 并在 C++ 中解析 JSON 数据 [关闭]

Posted

技术标签:

【中文标题】Qt 并在 C++ 中解析 JSON 数据 [关闭]【英文标题】:Qt and parsing JSON data in C++ [closed] 【发布时间】:2016-05-25 13:52:06 【问题描述】:

我的代码中有一个 QJsonObject,它看起来类似于下面发布的内容(一旦在 python 中转换为字符串),(具有更多相同形式的条目)。假设我想将所有名称属性分组到一个数组中。在 python 中,我会将我的 Json 字符串转换为字典,然后按如下方式填充此列表。如何使用 qt 在 c++ 中做到这一点?

1.

CountryNameList = []
For i in range len(CountryDictionary[1]):
      CountryNameList.append CountryDictionary[1][i]["name"]

// 下面是 JSON 文件的样子:

[
    
        "per_page": "50",
        "total": 264,
        "page": 1,
        "pages": 6
    ,
    [
        
            "longitude": "-70.0167",
            "name": "Aruba",
            "region": 
                "id": "LCN",
                "value": "Latin America & Caribbean (all income levels)"
            ,
            "adminregion": 
                "id": "",
                "value": ""
            ,
            "iso2Code": "AW",
            "capitalCity": "Oranjestad",
            "latitude": "12.5167",
            "incomeLevel": 
                "id": "NOC",
                "value": "High income: nonOECD"
            ,
            "id": "ABW",
            "lendingType": 
                "id": "LNX",
                "value": "Not classified"
            
        ,
        
            "longitude": "69.1761",
            "name": "Afghanistan",
            "region": 
                "id": "SAS",
                "value": "South Asia"
            ,
            "adminregion": 
                "id": "SAS",
                "value": "South Asia"
            ,
            "iso2Code": "AF",
            "capitalCity": "Kabul",
            "latitude": "34.5228",
            "incomeLevel": 
                "id": "LIC",
                "value": "Low income"
            ,
            "id": "AFG",
            "lendingType": 
                "id": "IDX",
                "value": "IDA"
            
        ,
  ] ]

【问题讨论】:

QJsonDocument::fromJson()创建一个QJsonDocument @KarstenKoop 转换后如何以上述方式访问元素。 和一些ToQVariantMap ? QJsonDocument::array() 为您提供一个可以迭代的数组,例如使用foreach @KarstenKoop 我成功创建了一个数组,然后访问了第一个元素,但是如何将第一个元素(即 JsonValue)转换为字典或访问其每个“名称”属性,具体取决于在索引上。 【参考方案1】:

示例如何读取和解析您的 json:

#include <QtCore>

int main() 
    QFile input_file("input.json");

    if (!input_file.open(QIODevice::ReadOnly | QIODevice::Text)) 
        qDebug() << "Can't open file";
        return 1;
    

    QJsonParseError parse_error;

    //read and parse from file
    QJsonDocument doc = QJsonDocument::fromJson(input_file.readAll(), 
                                               &parse_error);

    //check parsing errors
    if (parse_error.error != QJsonParseError::NoError) 
        qDebug() << "Parsing error:" << parse_error.errorString();
        return 1;
    

    //this is top level arraya
    QJsonArray arr_doc = doc.array();

    //this is array of country objects
    QJsonArray arr_countries = arr_doc[1].toArray();

    //list to save result
    QList<QString> country_name_list;

    //c++11 style for cycle. Iterate over countries.
    for (const auto& country: arr_countries) 
        //getting name of country and convert to string, append to result
        country_name_list.append(country.toObject()["name"].toString());
    

    qDebug() << country_name_list;

    return 0;

不要忘记添加到 .pro 文件:

CONFIG += c++11

并从您的 json 中删除逗号:

     
        ,
  ] ]

【讨论】:

以上是关于Qt 并在 C++ 中解析 JSON 数据 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在Qt C++中解析JSON数据并使之被QML应用 / 蓝讯

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

C++ Qt 无法正确解析 JSON 数组

如何解析 JSON 对象并在表格中显示? [关闭]

Qt之JSON生成与解析

Qt Json解析c ++