0

我想在 QT 中解析 JSON。JSON 看起来像这样:

{
"result": "ok",
"phrase": "katze",
"tuc": [
    {
        "meaningId": -6468009888908805000,
        "meanings": [
            {
                "text": "common name for animals",
                "language": "eng"
            }
        ],
        "phrase": {
            "text": "cats",
            "language": "eng"
        }
    },
    {
        "meaningId": -1913936533709497000,
        "phrase": {
            "text": "felis catus",
            "language": "eng"
        }
    },
    {
        "meaningId": 8369732998154311000,
        "phrase": {
            "text": "jack",
            "language": "eng"
        }
    }
],
"from": "deu"
}

我使用以下代码:

void Slovari::fileIsReady( QNetworkReply * reply)
{
    QByteArray rawData = reply->readAll();
    QJsonDocument doc(QJsonDocument::fromJson(rawData));
    QJsonObject jsonObject = doc.object();
    QVariantMap mainmap = jsonObject.toVariantMap();
    QVariantList phraseList = mainmap["tuc"].toList();
}

所以我得到了“tuc”数组的变体列表。一般来说,我想获取所有带有键“短语”的对象,它们的值是这个数组的内容。有什么办法可以摆脱它吗?或者这不适用于 QVariantList 吗?

4

1 回答 1

1

一个解决方案可能是

QVariantList phrases;
Q_FOREACH (const QVariant &v, phraseList) {
    QVariantMap m = v.toMap();

    if (m.contains("phrase")) {
        phrases << m["phrase"].toMap();
    }
}
于 2014-08-15T21:39:23.987 回答