【问题标题】:Javascript convert stringified array of objects into array of objectsJavascript将字符串化的对象数组转换为对象数组
【发布时间】:2017-08-24 14:45:19
【问题描述】:

我有以下变量(通过 HTTP 响应给我,因此是字符串):

var result = '[{name: "John"}, {name: "Alice"}, {name: "Lily"}]'

实际上有更多的对象,每个对象都有更多的属性,但你明白了。

尝试JSON.parse(result) 时出现以下错误:

[{name: "John"}, {name: "Alice"}, {name: "Lily"}]
  ^

SyntaxError: Unexpected token n

如何将此字符串解析为 javascript 对象数组?

【问题讨论】:

  • 这不是一个有效的 JSON
  • 键应该用引号括起来,例如 [{"name": "John"}...
  • 如果你真的不关心downsides,你可以做var result = eval(yourString);

标签: javascript arrays json parsing


【解决方案1】:

这不是有效的 JSON。为了使其成为有效的 JSON,您需要在键周围加上引号(“名称”)

[{"name": "John"}, {"name": "Alice"}, {"name": "Lily"}]

发生错误是因为解析器没有命中",而是命中了n。

【讨论】:

    【解决方案2】:

    由于您的字符串不是有效的 JSON(属性键周围缺少引号),因此您无法使用 JSON.parse 解析它。如果可以控制响应,则应将其更改为返回:

    [{"name": "John"}, {"name": "Alice"}, {"name": "Lily"}]
    


    工作演示:

    var result = '[{"name": "John"}, {"name": "Alice"}, {"name": "Lily"}]'
    
    console.log(JSON.parse(result))
    .as-console-wrapper { min-height: 100%; }

    【讨论】:

      【解决方案3】:

      由于您的输入格式是固定的,解析是微不足道的。

      function cutSides(s) { return s.substring(1, s.length - 1); }
      var pairs = cutSides(result).split(', ');
      var list_of_objects = pairs.map(function(s) { 
          var pair = cutSides(s).split(': ');
          var result = {};
          result[pair[0]] = cutSides(pair[1]); 
          return result;
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-19
        • 1970-01-01
        • 2018-09-25
        • 2014-03-12
        • 2023-02-06
        • 2012-05-08
        • 2022-10-07
        • 1970-01-01
        相关资源
        最近更新 更多