You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何QJsonArray会出现额外的数组嵌套层级?

QJsonObject读取JSON数组时出现额外嵌套的问题

问题现象

给定如下JSON数据:

{
    "high_scores": [
        {
            "name": "Homer",
            "score": 1601
        },
        {
            "name": "Bart",
            "score": 1492
        }
    ],
    "an_item": "Simpson",
    "another_item": 20
}

将其加载到QJsonObject后,访问an_item和another_item均正常,但读取high_scores数组时出现异常:

  • 无论用const QJsonArray array{obj["high_scores"]};还是const QJsonArray array{obj["high_scores"].toArray()};获取数组,调试器中显示数组存在额外嵌套:
    array    <1 items>
      [0]    <2 items>
         [0] <2 items>
         [1] <2 items>
    
  • 必须通过QJsonObject elem{array[0][ndx].toObject()};(多一层[0])才能访问到预期的元素。

核心原因

最可能的情况是你代码中实际加载的JSON数据,和你贴出的结构不一致——大概率high_scores字段被额外包裹了一层数组,实际JSON结构类似:

{
    "high_scores": [
        [
            {"name": "Homer", "score": 1601},
            {"name": "Bart", "score": 1492}
        ]
    ],
    "an_item": "Simpson",
    "another_item": 20
}

这种情况下,读取出来的数组自然会出现嵌套结构。

其次需要排查JSON加载代码是否存在逻辑错误:比如解析过程中是否不小心将high_scores的数组又包装了一次,例如错误地执行了类似QJsonArray array = QJsonArray({obj["high_scores"].toArray()});的代码。

解决方案

  1. 验证实际加载的JSON内容:在代码中加入输出,确认加载后的JSON结构是否符合预期:
qDebug() << QJsonDocument(obj).toJson(QJsonDocument::Indented);

通过输出可以直观看到high_scores是否存在多余的嵌套。

  1. 修正源头问题:

    • 如果是原始JSON的问题,直接修改JSON结构,去掉high_scores外层的多余数组;
    • 如果是加载代码的问题,检查解析逻辑,避免对数组进行重复包装。
  2. 临时补救方案(不推荐,仅用于无法修改JSON/代码的场景):如果必须处理现有嵌套结构,可以先取出内层数组再访问:

QJsonArray actualArray = obj["high_scores"].toArray().first().toArray();
QJsonObject elem = actualArray[ndx].toObject();

内容的提问来源于stack exchange,提问作者jkb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:11:20