我想要这个:
{
"level1a": "value",
"level1b": {
"level2a": {
"level3a": "nestedvalue"
},
"level2b": "value"
}
}
最终看起来像这样:
{
"level1a": "value",
"level1b": {
"level2a.level3a": "nestedvalue",
"level2b": "value"
}
}
然后执行以下操作:
{
"level1a": "value",
"level1b": [{
"key": "level2a.level3a",
"val": "nestedvalue"
},
{
"key": "level2b",
"val": "value"
}
]
}
我只希望点缀一些嵌套字段,并且希望能够选择哪些字段。我有一组JSON文档,其中包含数千个字段,其中大多数嵌套在一个或两个第一级或第二级字段下。
然后我最终想在点链字段上使用jq的to_entries之类的东西,然后准备将它们作为嵌套字段摄入到Elasticsearch中,以便在保持所有信息的同时保持字段总数少。
有什么想法吗?
答案 0 :(得分:0)
您显然已经知道问题第二部分的解决方案,所以这里是第一部分的解决方案:
# linearize all paths of the input object or array
def dotkeys:
def stringify: map(tostring) | join(".");
. as $in
| reduce paths(scalars) as $p (null;
($in|getpath($p)) as $v
| setpath([$p|stringify]; $v));
def chain(key):
.[key] |= dotkeys ;
chain("level1b")
使用您的输入,将产生:
{
"level1a": "value",
"level1b": {
"level2a.level3a": "nestedvalue",
"level2b": "value"
}
}