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

Dart嵌套JSON对象解析失败:多对象加逗号后jsonDecode无返回

排查JSON解析失败的问题

我来帮你搞定这个jsonDecode解析失败的问题!你遇到的情况,十有八九是JSON语法里藏了容易漏掉的小错误,先从你给出的示例代码说起,里面已经有两处不符合JSON规范的地方了:

你提供的示例JSON:

{
  "version": 1,
  "data": [{
    "married": true,
    "subs":[
      {
        "name":{
          "sub1":{}
        },
      },
    ]
  },
]}

首先看现有语法错误:

  • subs数组里第一个对象的末尾有个多余的逗号("sub1":{} },这里的逗号)
  • 最外层data数组的最后一个元素后面也有多余逗号({...}, ]}这里的逗号)

JSON是严格不允许尾随逗号的,虽然有些编程语言或编辑器支持,但标准JSON解析器(包括jsonDecode)遇到这种情况会直接解析失败。

再说说你添加第二个"name"对象时的问题

我猜你可能写成了类似下面的代码:

{
  "version": 1,
  "data": [{
    "married": true,
    "subs":[
      {
        "name":{
          "sub1":{}
        },
        "name":{
          "sub2":{}
        }
      },
    ]
  },
]}

这里除了依然存在尾随逗号的问题,还有一个致命错误:JSON对象中不允许出现重复的键名。同一个对象里出现两个"name"键,解析器要么直接报错,要么会忽略掉后面的那个键,导致你看不到预期的结果。

正确的写法分两种情况:

情况1:在subs数组里添加多个独立的带name的对象

如果是要给subs数组增加元素,应该把每个带name的对象作为数组的独立项,同时去掉所有尾随逗号:

{
  "version": 1,
  "data": [
    {
      "married": true,
      "subs": [
        {
          "name": {
            "sub1": {}
          }
        },
        {
          "name": {
            "sub2": {}
          }
        }
      ]
    }
  ]
}

情况2:在同一个对象里存放多个名称相关的内容

如果是想在同一个subs元素里放多个name相关的对象,那应该把name改成数组类型,比如叫names:

{
  "version": 1,
  "data": [
    {
      "married": true,
      "subs": [
        {
          "names": [
            {"sub1": {}},
            {"sub2": {}}
          ]
        }
      ]
    }
  ]
}

快速排查错误的小技巧

你可以直接用浏览器的开发者控制台来测试JSON是否合法:把你的JSON字符串用引号包裹,然后执行JSON.parse('你的JSON内容'),控制台会直接抛出错误信息,告诉你具体哪里出了问题(比如哪个位置有多余的逗号,或者重复键名)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:10:31