【问题标题】:JSON returned from Response.json() appears to be invalid?从 Response.json() 返回的 JSON 似乎无效?
【发布时间】:2023-01-10 01:17:29
【问题描述】:

https://jsonlint.com/ 上检查我的应用程序的 JSON 输出表明 JSON 无效......但我无法理解它是如何无效的。

有问题的 JSON:

{
    records: [{
        id: 70,
        whse: '00',
        partNo: '100E',
        description: '1" EMT CONDUIT (BUNDLE QTY. 1000FT)',
    }],
    start: 0,
    limit: 10,
    count: 1
}

我试过更改引号的类型但无济于事。返回的错误也根本没有帮助我:

Error: Parse error on line 1:
{   records: [{     id: 70
--^
Expecting 'STRING', '}', got 'undefined'

据我所知,它是有效的 JSON。 fetch() 成功后,Response.json() 函数调用将返回此 JSON。

【问题讨论】:

  • 请提供更多上下文。 IE:您调用Response.json() 的代码段以及您传递给它的参数的详细信息。
  • JSON使用"U+0022 : QUOTATION MARK {double quote} 不是单引号,属性名也必须用引号引起来。并且文字双引号必须用反斜杠转义。您在示例中提供的是 JavaScript,而不是 JSON。

标签: node.js json


【解决方案1】:

您认为引用是潜在的问题来源是正确的。

是的,这是一个有效的 JavaScript 对象。这意味着如果您要执行以下操作,JS 解释器将成功理解它:

const variable = {
    records: [{
        id: 70,
        whse: '00',
        partNo: '100E',
        description: '1" EMT CONDUIT (BUNDLE QTY. 1000FT)',
    }],
    start: 0,
    limit: 10,
    count: 1
};

但这不是有效的 JSON 字符串。如果你想要有效的 JSON 字符串,你需要像这样对其进行字符串化:

JSON.stringify({
    records: [{
        id: 70,
        whse: '00',
        partNo: '100E',
        description: '1" EMT CONDUIT (BUNDLE QTY. 1000FT)',
    }],
    start: 0,
    limit: 10,
    count: 1
});

结果将是字符串:

{
  "records": [
    {
      "id": 70,
      "whse": "00",
      "partNo": "100E",
      "description": "1" EMT CONDUIT (BUNDLE QTY. 1000FT)"
    }
  ],
  "start": 0,
  "limit": 10,
  "count": 1
}

(注意键名周围的双引号)

【讨论】:

    【解决方案2】:

    这是因为原始 JSON 需要字符串或整数作为属性,但是,对于 javascript JSON,它是一个有效的语法。有几件事是 jsonlint 不喜欢的,为了解决这个问题你必须

    • 为每个属性添加双引号
    • 更改为每个字符串值的双引号
    • 删除对象的最后一个逗号

    你会得到这样的东西:

    {
        "records": [{
            "id": 70,
            "whse": "00",
            "partNo": "100E",
            "description": "1" EMT CONDUIT (BUNDLE QTY. 1000FT)"
        }],
        "start": 0,
        "limit": 10,
        "count": 1
    }

    另外,考虑到由于字符串中有双引号,因此必须使用反斜杠来转义字符

    【讨论】:

      猜你喜欢
      • 2014-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      • 2015-09-17
      • 2018-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多