Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 如何使用jq将此嵌套对象转换为展平对象?_Json_Object_Key_Jq_Flatten - Fatal编程技术网

Json 如何使用jq将此嵌套对象转换为展平对象?

Json 如何使用jq将此嵌套对象转换为展平对象?,json,object,key,jq,flatten,Json,Object,Key,Jq,Flatten,我需要使用jq将这个输入转换成一个未列出的对象。在Python中,我可以如下正确地转换它 输出={k1+'-'+k2:k1的v2,k2的input.iteritems中的v1,v1.iteritems中的v2} 但我不知道如何在jq中做到这一点。对嵌套对象进行操作的文档非常差 { 组1权限:{ 地址:test1, 其他:test2, 数据包捕获:test3, 策略:test4, 时间表:测试5, 服务:test6 }, 组2权限:{ 配置:无, 数据访问:无, 报告访问:无, 威胁权重:无 },

我需要使用jq将这个输入转换成一个未列出的对象。在Python中,我可以如下正确地转换它

输出={k1+'-'+k2:k1的v2,k2的input.iteritems中的v1,v1.iteritems中的v2} 但我不知道如何在jq中做到这一点。对嵌套对象进行操作的文档非常差

{ 组1权限:{ 地址:test1, 其他:test2, 数据包捕获:test3, 策略:test4, 时间表:测试5, 服务:test6 }, 组2权限:{ 配置:无, 数据访问:无, 报告访问:无, 威胁权重:无 }, 组3权限:{ 防病毒:没有, 应用程序控制:无, 卡西:没有, 数据丢失预防:无, dnsfilter:没有, icap:没有, ips:没有, spamfilter:没有, voip:没有, 瓦夫:没有, webfilter:无 } } 输出应如下所示:

{ 组1权限地址:test1, 组1权限其他:test2, group1权限数据包捕获:test3, group1权限策略:test4, 组1权限计划:test5, group1权限服务:test6, group2权限配置:无, group2权限数据访问:无, group2权限报告访问:无, 组2权限威胁权重:无, group3权限防病毒:无, group3权限应用程序控制:无, 第3组许可casi:无, 组3权限数据丢失预防:无, 组3权限dnsfilter:无, 组3权限icap:无, 组3权限IP:无, group3权限垃圾邮件过滤器:无, 组3权限:无, 组3权限waf:无, group3权限webfilter:无 }
在我看来,该文档非常优秀,但它有助于对map有一定的了解,并对管道和过滤器有一定的了解。无论如何,这里有一个面向地图的解决方案:

to_entries
| map( .key as $key
       | .value
       | to_entries
       | map ( { ($key + "-" + .key): .value } ) | add ) | add
下面是另一种适用于任意深度嵌套的JSON对象和数组的方法:

[paths(scalars) as $path | { ($path|join("-")): getpath($path) }] | add

这里当然有一个警告:如果使用-作为连接字符导致路径冲突,则可能会丢失一些数据。

谢谢。我头痛得厉害,这个效果很好。