繁体   English   中英

使用 jq 将命名键转换为键值对

[英]Using jq convert named keys to key value pairs

我有这样的 json:

{"searchResult":[{"mac":"xx:xx:xx:xx:xx:xx"},{"time":"2021_04_11 23:45:01"},{"field_1":"87"}]}
{"searchResult":[{"mac":"xx:xx:xx:xx:xx:xx"},{"time":"2021_04_11 01:10:29"},{"field_2":"Some text"},{"field_3":"8"}]}
{"searchResult":[{"mac":"xx:xx:xx:xx:xx:xx"},{"time":"2021_04_11 03:49:14"},{"field_1":"92"},{"field_3":"25"}]}

某些字段始终存在。 其他是可选的,有 1000 多个可能的字段,并且可以随时添加新字段。 要导入数据库(BigQuery),我希望它们的格式如下:

{"searchResult":[{"key":"mac","value":"xx:xx:xx:xx:xx:xx"},{"key":"time","value":"2021_04_11 23:45:01"},{"key":"field_1","value":"87"}]}
{"searchResult":[{"key":"mac","value":"xx:xx:xx:xx:xx:xx"},{"key":"time","value":"2021_04_11 01:10:29"},{"key":"field_2","value":"Some text"},{"key":"field_3","value":"8"}]}
{"searchResult":[{"key":"mac","value":"xx:xx:xx:xx:xx:xx"},{"key":"time","value":"2021_04_11 03:49:14"},{"key":"field_1","value":"92"},{"key":"field_3","value":"25"}]}

到目前为止,我有:

jq -c '.searchResult[] |= to_entries'

这使:

{"searchResult":[[{"key":"mac","value":"xx:xx:xx:xx:xx:xx"}],[{"key":"time","value":"2021_04_11 23:45:01"}],[{"key":"field_1","value":"87"}]]}
{"searchResult":[[{"key":"mac","value":"xx:xx:xx:xx:xx:xx"}],[{"key":"time","value":"2021_04_11 01:10:29"}],[{"key":"field_2","value":"Some text"}],[{"key":"field_3","value":"8"}]]}
{"searchResult":[[{"key":"mac","value":"xx:xx:xx:xx:xx:xx"}],[{"key":"time","value":"2021_04_11 03:49:14"}],[{"key":"field_1","value":"92"}],[{"key":"field_3","value":"25"}]]}

我们不能在每个键/值 object 周围有不必要的 arrays,我们不能在 BigQuery 中导入嵌套的 arrays,在这里它们是多余的。

我可以用 sed 解决这个问题,但根据我自己的理解,我希望这一切都在 jq 中完成。

非常感谢

直接、高效和稳健的方法:

.searchResult |= map(to_entries[])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM