c++ - 使用 Qt 解析 JSON

标签 c++ mysql json qt parsing

嘿,我在 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 解析器;但是请任何人都可以告诉我我做错了什么?

最佳答案

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

以下代码适用于您的示例 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();
}

关于c++ - 使用 Qt 解析 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26272309/

相关文章:

mysql - sql数据库中的条件

php - 有选择地使用 Sed 替换 SQL 语法

json - Swift 解码器无法使用类型为 'decode' 的参数列表调用 '(VrOpsObjectStatistics!, from: Data)'

c++ - 否定一个概念 (C++20)

c++ - 从模板参数派生并调用其复制构造函数

c++ - 从 MSVC 输出生成 Makefile 依赖项

javascript - 我应该如何在 javascript 中将复杂对象持久化为字符串

c++ - C++03中如何判断函数是否返回引用?

php - 将不同的数据插入两个表中

c++ - 使用 Boost 的 JSON 数据