Linux
使用 jq 從變數創建嵌套的 json 文件
我有一個腳本,我在其中儲存變數並使用它來嘗試將 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