我正在尝试生成一个包含所有过滤器的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中的解决方案,但任何方法都非常受欢迎!提前谢谢!
答案 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)