【问题标题】:JSON.parse() returns only a part of the objectJSON.parse() 只返回对象的一部分
【发布时间】:2015-05-26 08:35:09
【问题描述】:

我有一个字符串形式:

var targetString = 
"{hello: 5, world: 10}, {hello: 4, otherworld: 11}";

使用语法

var targetObject = JSON.parse(targetString) 

我只收到:

targetObject = {
 hello: 5,
 world: 10
}

所以它只需要第一部分而不是第二部分。我该如何预防和解决它?

【问题讨论】:

  • 这不是有效的 JSON。属性名称必须用双引号括起来,并且不能有多个对象,除非它们是数组的一部分。
  • 当我运行该代码时,我得到SyntaxError: Unexpected token h。你的代码没有按照你说的做你说它应该做的。

标签: javascript json


【解决方案1】:

将其包含在数组 [] 中,并将键括在引号中:

var targetString = '[{"hello":5,"world":10},{"hello":4,"otherworld":11}]';
var targetObject = JSON.parse(targetString);

【讨论】:

    【解决方案2】:

    这是对象数组的正确语法:

    var targetString = '[{"hello": 5, "world": 10}, {"hello": 4, "otherworld": 11}]';
    var targetArray = JSON.parse(targetString);
    console.log(targetArray);

    数组元素必须用方括号括起来,属性名必须用双引号括起来。

    【讨论】:

    • 它们必须明确地是引号吗?单引号不行吗?我真的在问 btw :)
    • 是的,JSON 是 Javascript 语法的一个非常受限的子集。只允许使用双引号。
    • 只要点击这里的Run code snippet,为什么还需要小提琴?
    • 小提琴是为了测试单引号。是的,我可以点击“复制 sn-p 以回答”并在那里进行测试。
    【解决方案3】:

    您需要将 json-keys 包装成双引号,否则它不是有效的 JSON。

    var targetString = '[{"hello": 5, "world": 10}, {"hello": 4, "otherworld": 11}]';
    

    【讨论】:

      【解决方案4】:

      如果您查看JSON.parse() 的相应方法JSON.stringify(),您需要将键括在引号中才能工作。虽然您通常可以避免在 JavaScript 中使用引号,但官方 JSON 规范确实需要它们。

      除了 Arvind 提到的内容外,这应该可以满足您的需求。

      var string = '[{"hello": 5, "world": 10}, {"hello": 4, "otherworld": 11}]';
      JSON.parse(string);
      // this will return an array with two objects
      

      【讨论】:

        猜你喜欢
        • 2018-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-03
        • 2018-07-13
        • 1970-01-01
        • 2017-07-18
        • 1970-01-01
        相关资源
        最近更新 更多