【发布时间】:2017-02-02 00:42:37
【问题描述】:
所以这是一个我什至不知道从哪里开始的问题,所以即使只是指向正确方向的指针也会很棒。
所以我的数据看起来像这样:
data = {
"agg": {
"agg1": [
{
"keyWeWant": "*-20.0",
"asdf": 0,
"asdf": 20,
"asdf": 14,
"some_nested_agg": [
{
"keyWeWant2": 20,
"to": 25,
"doc_count": 4,
"some_nested_agg2": {
"count": 7,
"min": 2,
"max": 5,
"keyWeWant3": 2.857142857142857,
"sum": 20
}
},
{
"keyWeWant2": 25,
"to": 30,
"doc_count": 10,
"some_nested_agg2": {
"count": 16,
"min": 2,
"max": 10,
"keyWeWant3": 6.375,
"sum": 102
}
}
]
},
{
...
},
{
...
},
...
]
}
}
现在从示例中,在“agg”中有 N 个“agg1”结果,在每个“agg1”结果中有一个“keyWeWant”。每个“agg1”结果还有一个“some_nested_agg”结果列表,每个结果都包含一个“keyWeWant2”。每个“keyWeWant2”值都与层次结构中某处的单个“keyWeWant”值相关联。类似地,每个“keyWeWant2”还包含一组“some_nested_agg2”的结果(这次不是列表,而是地图)。每组结果都包含一个“keyWeWant3”。
现在我想扁平化这个结构,同时仍然保留 'keyWeWant'、'keyWeWant2' 和 'keyWeWant3' 之间的关联(我本质上是反规范化)以获得类似这样的结果:
我希望函数看起来像什么:
[
{
"keyWeWant" : "*-20",
"keyWeWant2" : 20,
"keyWeWant3" : 2.857142857142857
},
{
"keyWeWant" : "*-20",
"keyWeWant2" : 25,
"keyWeWant3" : 6.375
},
{
...
},
{
...
}
]
这是一个只有深度 3 的示例,但可能存在任意深度,其中一些嵌套值是列表,一些是数组/列表。
我想做的是编写一个函数来接收我想要的键以及在哪里找到它们,然后去获取键并进行非规范化。
看起来像:
function_name(data_map, {
"keyWeWant" : ['agg', 'agg1'],
"keyWeWant2" : ['agg', 'agg1', 'some_nested_agg'],
"keyWeWant" : ['agg', 'agg1', 'some_nested_agg', 'some_nested_agg2']
})
有什么想法吗?我熟悉 Java、Clojure、Java-script 和 Python,并且正在寻找一种相对简单的方法来解决这个问题。
【问题讨论】:
-
仅供参考 - 这是一个 javascript 对象,而不是
JSON structure- JSON 是一个 javascript 对象的字符串表示法 - 你没有在这段代码中处理它 -
What I want the function to look like- 这不是一个函数,这是另一个 javascript 对象 -
我明白你的意思,但这在技术上处理的是从弹性搜索返回的 JSON。现在,在解析数据之后,它变成了 JS 中的 Object,或 Python 中的 dict,Java 中的 Map 或 clojure 中的 hash-map。关于“我希望函数看起来像什么”,我在谈论函数输入。我希望它接收数据(以任何语言表示)和我想要的键的映射以及在哪里可以找到它们。我实际上是用 Python 编写的,只是提供了一个我想如何调用该函数的示例。
标签: javascript python json elasticsearch clojure