【发布时间】:2018-04-20 22:52:57
【问题描述】:
我有一个很大的 JSON 对象,它可能是不规则的,我想要找到一种方法将它的所有对象放在一个平面数组中。
这是一个示例 json:
{
"name":"getPost",
"request":{
"type":"object",
"fields":[{
"key":"id",
"value":{"type":"string"}
}]
},
"response":{
"type":"object",
"fields":[{
"key":"post",
"value":{
"type":"object",
"fields":[{
"key":"id",
"value":{"type":"string"}
},{
"key":"title",
"value":{"type":"string"}
},{
"key":"content",
"value":{"type":"string"}
},{
"key":"userId",
"value":{"type":"string"}
}]
}
}]
},
"error":[]
}
我希望它变成这样:(我只需要具有浅键值的对象)
[
{
"key":"id",
"value":{"type":"string"}
},{
"key":"post",
"value":{"type":"object"}
},{
"key":"id",
"value":{"type":"string"}
},{
"key":"title",
"value":{"type":"string"}
},{
"key":"content",
"value":{"type":"string"}
},{
"key":"userId",
"value":{"type":"string"}
}
]
我需要知道在没有 ES6 的情况下是否有一种简单的方法。
【问题讨论】:
-
这是一个非常具体的问题。它不仅仅是扁平化一个数组,它是将数据规范化为一个只有你知道它看起来正确的形式。因此,问题是:定义目标结构的规则是什么?
-
... 如果一个人坚持 OP 的要求 - 我只需要具有浅键值的对象 - 一个人最终会得到
{ "type": "string" }的列表,因为这是唯一的浅子结构;{ "key":"userId", "value": { "type": "string" } }已经太复杂了。或者浅键值是什么意思? -
我的意思是所有具有类型的对象,我的问题是我想验证类型,它们可以是原始类型,如字符串、数字、数组或对象,也可以是用户定义的类型,所以我需要找到它们,然后验证它们。 @PeterSeliger
-
request和response在提供的数据结构的第一层也具有type,但不是预期结果的示例数据的一部分。 -
是的,这就是问题所在,正如我在问题中所说,JSON 可能是不规则的。包含对象和数组,我需要验证具有“类型”字段的对象
标签: javascript json recursion flatten