2016-11-28 258 views
0

我想知道如何通过QJsonObjectforeach获得C++中的键/值对?到目前为止,我只能获得价值。通过QJsonObject获得键/值对的Foreach

//main.cpp 
QFile file(":/geoip.json"); 
file.open(QIODevice::ReadOnly); 
QByteArray rawData = file.readAll(); 
file.close(); 
QJsonDocument doc(QJsonDocument::fromJson(rawData)); 
QJsonObject json = doc.object(); 
foreach(const QJsonValue &value, json) { 
    QJsonObject obj = value.toObject(); 
    qDebug() << value; 
} 

//geoip.json 
{ 
    "Afghanistan": "58.147.159.255", 
    "Albania": "31.22.63.255", 
    "Algeria": "105.235.143.255", 
    "American Samoa": "202.70.115.241", 
    "Andorra": "109.111.127.255", 
    "Angola": "105.175.255.255", 
    "Anguilla": "208.66.50.44", 
    "Antarctica": "46.36.195.10" 
} 
+1

keys方法返回顶级密钥。在你的情况json.keys() –

+0

@johnelemans真棒,谢谢。如果您在下面发布,我可以接受您的解决方案:) – Jon

回答

0

约翰已经给出了答案。使用密钥()完整的工作解决方案将是:

#include <QCoreApplication> 
#include <QFile> 
#include <QByteArray> 
#include <QJsonDocument> 
#include <QJsonObject> 
#include <QJsonValue> 
#include <QDebug> 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 

    //main.cpp 
    QFile file("path/to/geoip.json"); 
    file.open(QIODevice::ReadOnly); 
    QByteArray rawData = file.readAll(); 
    file.close(); 
    QJsonDocument doc(QJsonDocument::fromJson(rawData)); 
    QJsonObject json = doc.object(); 
    foreach(const QString& key, json.keys()) { 
     QJsonValue value = json.value(key); 
     qDebug() << "Key = " << key << ", Value = " << value.toString(); 
    } 

    return a.exec(); 
} 
+0

什么是'价值'? – eyllanesc

+0

你是对的eyllanesc。有一个小错误。我应该在提交之前测试我的代码。我改进了我的答案。 – twisq