我需要解析一个长的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::array
或QJsonDocument::object
之前,请参见QJsonDocument::isArray和QJsonDocument::isObject以测试您是在处理数组还是对象。