Linux

使用 jq 從變數創建嵌套的 json 文件

  • November 9, 2021

我有一個腳本,我在其中儲存變數並使用它來嘗試將 json 輸出創建到文件中。這是我的 json 建構格式

#!/bin/bash
JSON_STRING=$(jq -n \
                 --arg configId "$configid" \
                 --arg objectname "tempfile" \
                 --arg artifacts "[{ "name" : "oer", "version" : "$ot" }]" \
                 --arg test "2021" \
                  '$ARGS.named') > output.json
                 

所需的 json o/p (output.json) -

{ "configId": "c8f", "objectname": "tempfile", "artifacts": [{ "name" : "oer", "version" : "1.01" }], "test" : "2021"}

在這裡我沒有得到想要的輸出。任何幫助都會很棒

我將分兩步完成:(編輯:工件是一個對像數組)

inner=$(jq -n --arg name oer \
             --arg version "$ot" \
             '$ARGS.named'
)
final=$(jq -n --arg configId "$configid" \
             --arg objectname "tempfile" \
             --arg test "2021" \
             --argjson artifacts "[$inner]" \
             '$ARGS.named'
)
echo "$final"
{
 "configId": "c8f",
 "objectname": "tempfile",
 "artifacts": [
   {
     "name": "oer",
     "version": "1.01"
   }
 ],  "test": "2021"
}

-c如果您希望最終輸出為一行,請添加 a 。


您沒有獲得輸出,因為您將輸出保存在變數中,因此沒有任何內容可以重定向到文件。你可以這樣做:

variable=$(command)

或這個:

command > file

但是你不能這樣做variable=$(command) > file,因為沒有什麼可以重定向的。因此,儘管上面將執行並且將創建和/或覆蓋file,但文件將始終為空,因為您已經將命令的輸出保存在變數中。

因此,如果您都希望將輸出保存在變數中並將其保存到文件中,則需要以下內容:

JSON_STRING=$(jq -n \
                 --arg configId "$configid" \
                 --arg objectname "tempfile" \
                 --arg artifacts "[{ "name" : "oer", "version" : "$ot" }]" \
                 --arg test "2021" \
                  '$ARGS.named')
printf '%s\n' "$JSON_STRING" > output.json

引用自:https://unix.stackexchange.com/questions/676634