【发布时间】:2021-09-17 02:44:41
【问题描述】:
我正在从服务器获取JSON 格式的响应。这个JSON 可能构成具有重复Keys 的对象。当我显示结果时,重复的键值被提交。调试后我发现这是因为我正在执行JSON.stringify 方法来格式化代码,然后再提供给前端。
截至目前,当我执行 JSON.stringify 时,它会删除 duplicate 条目并只为重复的 last 提供 last 值keys 但是我想保留所有内容。
var obj = {name: "John", age: 30, name: "New York"};
var result = JSON.stringify(obj).replace(/\_/g, '');
console.log(result);
//{"name":"New York","age":30}
正如我们所见,first name 已被提交。如何修改代码以便我们可以保留重复键的所有值?
请注意:
到目前为止,我已经提供了具有重复键name 的示例代码。但是,当我从服务器收到响应时,我不知道 key 可能会重复什么,所以我正在寻找一种通用解决方案,它可以适用于所有事情,而不是只适用于 name 的硬编码逻辑。
非常感谢任何建议或解决方法。
【问题讨论】:
-
“此 JSON 可能构成具有重复键的对象” - 这是不可能的。如果您尝试多次添加一个键,它只会覆盖前一个实例的内容。如果需要所有值,请修复 JSON 的来源。
-
@Andreas 非常感谢您的回复,因为
JSON重复的值在我的情况下是完全有效的,并且它们遵守JSON-Schema,因为它们是其中的一部分,因此无法修复源用户提供的自定义元素。它可以读取类似"google:field":"Value1","google:field":"Value2"等的内容。根据应用程序,它允许有重复的键。此外,我不允许对其进行任何修改。我只想编写一些自定义脚本来处理 JSON 中的这些重复条目。 -
“根据应用程序,它允许有重复的键。” 我不明白。编码标准决定了您如何使用代码,而不是应用程序定义。如果一个程序要求重力不存在,那么重力会不复存在吗?
-
问题不在于 JSON Schema。问题是在 JavaScript 中不可能有像
var obj = {name: "John", age: 30, name: "New York"};这样的对象。尝试运行这段代码,你会得到一个带有单个name字段的对象,其值为"New York"。 -
“根据应用程序...” - ECMAScript 不关心您的应用程序。一个对象只能有唯一的键。如果您必须使用该(恕我直言无效)JSON,您必须编写自己的 JSON 解析器。祝你好运......
标签: javascript html json vue.js