簡體   English   中英

如何使用 JQ 密鑰中的數據命名新的 JSON 文件

[英]How to use data from a JQ key to name a new JSON file

我一直在嘗試修改此線程中@peak 提供的已接受代碼: Split a JSON file into separate files 我非常感謝這個答案,因為它為我節省了很多時間。

該線程中提供的兩種解決方案都生成的拆分文件中產生了我期望和想要的結果。 但是,output 文件名為“$key.json”。 我希望文件名是 output 文件的第一個字段中包含的數據。

每個 output 文件看起來像這樣:

{
  "name": "Bob Smith",
  "description": "(some descriptive text)",
  "image": "(link to an image file)",
  ...
}

我花了幾個小時試圖弄清楚如何將 output 文件名設為“Bob Smith.json”、“Jane Doe.json”等,而不是“0.json”、“1.json”等。我嘗試了許多不同的方法來修改 output 參數printf "%s\n" "$item" > "/tmp/$key.json"'{ print $2 > "/tmp/" $1 ".json" }'沒有任何成功。 我對 JQ 完全陌生,所以我懷疑解決方案可能非常簡單。 但是,如果不花更多時間學習 JQ,我認為我自己無法找到它。

為了方便起見,以下是上一個線程的解決方案:

   jq -cr 'keys[] as $k | "\($k)\n\(.[$k])"' input.json |
  while read -r key ; do
    read -r item
    printf "%s\n" "$item" > "/tmp/$key.json"
  done

jq -cr 'keys[] as $k | "\($k)\t\(.[$k])"' input.json |
  awk -F\\t '{ print $2 > "/tmp/" $1 ".json" }'

精通JQ的人可以給我提示嗎? 謝謝你。

盲目地使用 .name 作為文件名的基礎可能不是一個好主意,因此請根據您的需要調整以下內容。

假設輸入的形式與上一個問題一樣,即

{ "item1": { "name": "Bob Smith", ...}, ...}

您可以使用以下管道:

jq -cr '.[] | "\(.name)\t\(.)"' input.json |
  awk -F\\t '{ print $2 >> "/tmp/" $1 ".json" }' 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM