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

JSON.parse giving only the last element as output

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

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

第console.logreturns所有元素以JSON形式。第二个returns只是最后一个。一共有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"
}

虽然 JSON(这只是一个符号)允许重复的键名,但指南是 they SHOULD be unique。如果您想使用 JSON 创建一个 JavaScript 对象,那么您将受到 JavaScript 对象不能有重复键这一事实的限制。因此,尽管您有有效的 JSON,但它不能由 JavaScript 对象表示,因此它不会在被解析的往返行程中存活下来(JSON 转换为 JavaScript 对象) 通过 JSON.parse 然后转换回 JSON.

为了方便您在 JavaScript 中工作,您可以考虑更改信息的 JSON 表示,以便它可以表示为 JavaScript 对象。

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

使用离散对象数组:

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

使用名称数组:

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

作为最终的 heavy-handed 方法,您不必将 JSON 转换为 JavaScript 对象。您可以使用解析器解析它,该解析器允许您为 JSON 字符串中出现的句法元素提供自己的处理程序,并且可以按照您希望的任何方式处理重复的键。我可以建议 clarinet 图书馆这样做吗?

另见,How to get the JSON with duplicate keys completely in javascript