我需要解析一个长的json文件,其中包含国家/地区名称和ISD拨号代码。我需要将它们最好放在QVector或数组中,以便可以在诸如QComboBox的下拉菜单中填充它们。

我尝试使用QJsonObject类,但无法按预期进行解析。长度返回零。

这是我的示例文件。

[{
    "name": "Afghanistan",
    "dial_code": "+93",
    "code": "AF"
  },
  {
    "name": "Aland Islands",
    "dial_code": "+358",
    "code": "AX"
  },
  {
    "name": "Albania",
    "dial_code": "+355",
    "code": "AL"
  },
  {
    "name": "Algeria",
    "dial_code": "+213",
    "code": "DZ"
  }]


我尝试下面的代码:

QJsonDocument doc = QJsonDocument::fromJson(jsonFile->readAll());
jsonFile->close();

if(!doc.isNull())
{
    qDebug() << "Good Json document";
}

QJsonObject jObject = doc.object();
qDebug() << "length : " << jObject.length();

QJsonObject::iterator i;
for (i = jObject.begin(); i != jObject.end(); ++i)
{
    if (i.value().isNull())
        qDebug() << i.key();
    else
        qDebug() << i.key() << i.value();
}

最佳答案

您正在将文档的根对象解释为JSON对象,而不是实际上的数组。您应该使用以下代码:

QJsonArray rootArray = doc.array();


代替

QJsonObject jObject = doc.object();


然后,您可以迭代此数组中包含的各种Object。

在调用QJsonDocument::arrayQJsonDocument::object之前,请参见QJsonDocument::isArrayQJsonDocument::isObject以测试您是在处理数组还是对象。

09-17 11:24