提问人:Dark Programmer 提问时间:7/20/2019 最后编辑:Jared ForthDark Programmer 更新时间:7/21/2019 访问量:901
JSON.parse 仅提供最后一个元素作为输出
JSON.parse giving only the last element as output
问:
我正在使用 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(这只是一种表示法)允许重复的键名,但指导是它们应该是唯一的。如果要使用 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 字符串中出现的语法元素提供自己的处理程序,并且可以按照您希望的任何方式处理重复的键。我可以建议单簧管库这样做吗?
评论
[ ]
[ "Bran", "Ram", "Sam" ]