如何解析QT中的关联JSON数组?

时间:2016-12-17 00:48:26

标签: c++ json qt

我想知道,如何在QT中解析关联的JSON数组。

这是我的例子JSON:

{
    "req_code": 5,
    "params": {
        "email":"user@domain.com",
        "password":"123"
    }
}

因此,为了获取电子邮件(来自名为'数据'的JSON字符串),我必须做这样的事情:

QJsonDocument doc=QJsonDocument::fromJson(data.toUtf8());
QJsonObject jobj=doc.object();
QJsonValue params_value=jobj.value(QString("params"));
QJsonArray params_array=params_value.toArray();

现在,'电子邮件'正在举行的#params_array'对象,但这个数组不是QHash而不是QMap。如果它是QHash我会收到电子邮件:

QString email=params_array.value("email");

但它不是哈希,它是一个向量。那么如何获得' email'在这种情况下,财产以适当和快速的方式?

2 个答案:

答案 0 :(得分:1)

params的值是一个对象,QJsonObject提供了map-like functions,因此您可以轻松访问它:

auto doc = QJsonDocument::fromJson(data.toUtf8());
auto docObj = doc.object();
auto paramsObj = docObj["params"].toObject();
auto email = paramsObj["email"];

documentation说:

  

所有JSON类都是基于值的隐式共享类。

所以你真的不需要太在意表现。如果您想将QJsonObject汇总为哈希值或地图,可以使用QJsonObject::toVariantHashQJsonObject::toVariantMap

答案 1 :(得分:0)

试试这个;

        QJsonArray params_array = jobj.value("params").toArray();
        qDebug() << "params_array:: results array size = " << params_array.count();
        foreach (const QJsonValue & value, a)
        {
            QJsonObject obj = value.toObject();
            qDebug() << "obj keys " << obj.keys() ;
            // here you can access your data, verify your keys with the debug a
        }