簡體   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