嘿,我在JSON中输入了此文本:
(不包含所有返回内容)

    [
        {
            "ERROR":false,
            "USERNAME":"Benutzer",
            "FORMAT":"HUMAN",
            "LATITUDE_MIN":84,
            "LATITUDE_MAX":36,
            "LONGITUDE_MIN":5,
            "LONGITUDE_MAX":20,
            "RECORDS":203
        },
        [
            {
                "MMSI":233434540,
                "TIME":"2014-10-09 06:19:06 GMT",
                "LONGITUDE":8.86037,
                "LATITUDE":54.12666,
                "COG":347,
                "SOG":0,
                "HEADING":236,
                "NAVSTAT":0,
                "IMO":0,
                "NAME":"HELGOLAND",
                "CALLSIGN":"DK6068",
                "TYPE":90,
                "A":20,
                "B":15,
                "C":4,
                "D":4,
                "DRAUGHT":2,
                "DEST":"BREMERHAVEN",
                "ETA":"00-00 00:00"
            },
            {
                "MMSI":319072300,
                "TIME":"2014-10-09 06:08:53 GMT",
                "LONGITUDE":9.71578,
                "LATITUDE":54.31949,
                "COG":343.6,
                "SOG":0,
                "HEADING":197,
                "NAVSTAT":5,
                "IMO":1012189,
                "NAME":"M.Y. ESTER III",
                "CALLSIGN":"ZGED3",
                "TYPE":37,
                "A":31,
                "B":35,
                "C":7,
                "D":6,
                "DRAUGHT":3.5,
                "DEST":"SCHACT AUDORF",
                "ETA":"09-16 08:00"
            }

    // many more lines but the Json IS VALID.

    ]
   ]


我会解析它并将其放在MYSQL表中。
并非全部,仅名称和MMSI首先。
但这在我的领事中看不到任何东西,因为它不会在foreach中跳跃:

bool ok = true;

// my json data is in reply & ok is a boolean
QVariantList result = parser.parse(reply, &ok).toList();

foreach(QVariant record, result) {
    QVariantMap map = record.toMap();
    qDebug() << map.value("NAME");
}


怎么了 ?
当我调试时,我只看到它不会在foreach中跳转。
我使用QJson库:QJson :: Parser parser;但是请任何人都可以告诉我我做错了什么?

最佳答案

您的代码看起来像是在顶层数组上进行迭代,而要查找的数据在嵌套数组中,这实际上是顶层数组的第二项。因此,您需要遍历内部数组中的项目。

以下代码适用于您的示例JSON:

QVariantList result = parser.parse(reply, &ok).toList().at(1).toList();
foreach (const QVariant &item, result) {
    QVariantMap map = item.toMap();
    qDebug() << map["NAME"].toString();
    qDebug() << map["MMSI"].toLongLong();
}

08-06 00:43