JSON.parse 仅提供最后一个元素作为输出

JSON.parse giving only the last element as output

提问人:Dark Programmer 提问时间:7/20/2019 最后编辑:Jared ForthDark Programmer 更新时间:7/21/2019 访问量:901

问:

我正在使用 JSON 将信息从 NodeJS(服务器端)传输到我的客户端。当我尝试在客户端解析 JSON 时,它只输出最后一个元素,在本例中为 .我希望输出所有元素。'name: "Sam"'

我尝试使用数组和变量来分配解析的数据。我还直接尝试将其记录到控制台: .这三个人都给出了相同的结果。[console.log(JSON.parse(this.response));]

第一个console.log以 JSON 形式返回所有元素。第二个只返回最后一个。总共有 3 个元素。 我希望将所有元素都分配给变量。

request.open('GET', 'http://localhost:3000/listofvoted', true);

request.onload = function () {
    console.log(this.response)
    console.log(JSON.parse(this.response));
}

request.send();

我收到的 JSON:

{
  "name": "Bran",
  "name": "Ram",
  "name": "Sam"
}
JavaScript JSON 解析 客户端

评论

1赞 arnonuem 7/20/2019
如果您能提供来自该服务器的 json,那就太好了。
0赞 Pointy 7/20/2019
一个对象只能有一个具有给定名称的属性。
0赞 Dark Programmer 7/20/2019
所以。。。我不能有三个“名字”:?如果我只做 { “Bran”, “Ram”, “Sam”} 它会起作用吗?
0赞 Pointy 7/20/2019
使用 : 创建一个数组而不是一个普通对象。[ ][ "Bran", "Ram", "Sam" ]

答:

1赞 Wyck 7/20/2019 #1

尽管 JSON(这只是一种表示法)允许重复的键名,但指导是它们应该是唯一的。如果要使用 JSON 创建 JavaScript 对象,则会受到 JavaScript 对象不能有重复键这一事实的限制。因此,尽管您拥有有效的 JSON,但它不能由 JavaScript 对象表示,因此它将无法在被解析(JSON 转换为 JavaScript 对象)然后转换回 JSON 的往返旅程中幸存下来。JSON.parse

为了方便自己使用 JavaScript,您可以考虑更改信息的 JSON 表示形式,以便将其表示为 JavaScript 对象。

以下是一些可能有效的替代方法来表示您拥有的内容:

使用离散对象数组:

[
  { "name": "Bran" },
  { "name": "Ram" },
  { "name": "Sam }"
]

使用名称数组:

{
  "names": [ "Bran", "Ram", "Sam" ]
} 

作为最后的、严厉的方法,您不必将 JSON 转换为 JavaScript 对象。您可以使用解析器来解析它,该解析器允许您为 JSON 字符串中出现的语法元素提供自己的处理程序,并且可以按照您希望的任何方式处理重复的键。我可以建议单簧管库这样做吗?

另请参阅,如何在 javascript 中完全获取具有重复键的 JSON