【问题标题】:How to retain the duplicate values during the JSON stringify operation如何在 JSON 字符串化操作期间保留重复值
【发布时间】: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


【解决方案1】:

Json 对象不允许重复键。 如果你只执行:

var obj = {name: "John", age: 30, name: "New York"};
console.log(obj)

您会看到您已经丢失了第一个“名称”值。

我能想到的唯一解决方法是永远不要将接收到的 JSON 字符串转换为对象。

或者你也可以手动写一个逻辑,用逗号分割这个json字符串,根据需要转换成json对象,但是没有重复的key,例如:

{name: ["John", "New York"], age: 30};

【讨论】:

  • 感谢您的回复,我自己在问题中提供了这个。我请求一种解决方法来保留JSON 中的重复键。根据 JSON 文档,建议不要有重复的密钥,这并不意味着它被禁止。
  • 这只是 w3schools.com 仍然是与 HTML/CSS/JavaScript 相关的任何资源的糟糕资源的众多示例之一。它是一个对象或 JSON(一个字符串)。没有“JSON 对象”之类的东西。只需阅读链接的文章。
  • @Andreas 引用您链接的文章:“虽然对象文字不是“JSON 对象”,但确实有一个 JSON 对象......”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-14
  • 2021-11-06
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
相关资源
最近更新 更多