【问题标题】:JSON.parse giving only the last element as outputJSON.parse 只给出最后一个元素作为输出
【发布时间】:2019-11-29 05:24:45
【问题描述】:

我正在使用 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"
}

【问题讨论】:

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

标签: javascript json parsing client-side


【解决方案1】:

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

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

这里有一些替代方法来表示你所拥有的可能有用的东西:

使用离散对象数组:

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

使用名称数组:

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

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

另请参阅,How to get the JSON with duplicate keys completely in javascript

【讨论】:

    猜你喜欢
    • 2020-01-12
    • 1970-01-01
    • 2022-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-08
    相关资源
    最近更新 更多