将带有重复键的JSON字符串转换为JSON字符串数组

时间:2017-02-27 00:27:19

标签: javascript arrays json

我正在尝试生成一个包含所有过滤器的JSON字符串,但我一直坚持使用重复键。所以,我想找到一个解决方案,将重复的密钥转换为JSON数组。

例如,我有这个JSON对象:

{
  "filter-1": "value-1",
  "filter-1": "value-2",
  "filter-2": "value-3",
  "filter-3": "value-4"
}

我想把它变成这个:

{
  "filter-1": ["value-1", "value-2"],
  "filter-2": "value-3",
  "filter-3": "value-4"
}

有人能指出我正确的方向吗?我很欣赏JavaScript中的解决方案,但任何方法都非常受欢迎!提前谢谢!

2 个答案:

答案 0 :(得分:0)

重复的密钥对导致覆盖问题。

Javascript对象不允许重复键。

var testObj = JSON.parse('{"filter-1":"value-1","filter-1":"value-2","filter-2":"value-3","filter-3":"value-4"}');将在解析第二个密钥对(filter1:value-2)时覆盖第一个密钥对(filter-1:value-1),因为两个密钥对具有相同的密钥。

但是,JSON规范(不是Javscript对象)没有特别提及是否允许重复键。您可能希望编写自己的解析函数来处理重复的键。

答案 1 :(得分:0)

您必须更改JSON的格式,因为JS对象中的键必须是唯一的。 然后你可以硬编码或使用像jquery或underscorejs这样的库来将它们分组。

https://jsfiddle.net/p5fkjcwt/1/

var objects = 
{ 
   0: {"filter": "filter-1", "value":"value-1"},
   1: {"filter": "filter-1", "value":"value-2"},
   2: {"filter": "filter-2", "value":"value-3"},
   3: {"filter": "filter-3", "value":"value-4"}
}

var result = _.groupBy(objects,"filter")

console.log(result)
相关问题