[英]changing the json using jq in bash
我有以下json
{
"name" : "qwerty",
"values" :[
{
"field1" : [
"val1"
],
"field2" : [
"val2"
],
"name1" : [["a", "b"], ["c", "d"]]
},
{
"field1" : [
"val3"
],
"field2" : [
"val4"
],
"name1" : [["a", "b"], ["c", "d"]]
},
{
"field1" : [
"val5"
],
"field2" : [
"val6"
],
"name1" : [["a", "b"], ["c", "d"]]
}
]
}
我需要在bash中使用jq將上面的json更改為以下內容
{
"name" : "qwerty",
"values" :[
{
"field1" : "val1",
"field2" : "val2",
"new_name" : [["a", "b"], ["c", "d"]]
},
{
"field1" : "val3",
"field2" : "val4",
"new_name" : [["a", "b"], ["c", "d"]]
},
{
"field1" : "val5",
"field2" : "val6",
"new_name" : [["a", "b"], ["c", "d"]]
}
]
}
在這里,我面臨以下問題:
我嘗試使用標記值解析內部json並用空格替換'['']',但是,當我嘗試以列表的形式將“值”放在變量中時,jq是美化然后顯示每個新行作為數組的元素。
值數組中的內部jsons數量不固定。
有人可以幫我構建jash語句,以便在bash中運行以進行必要的更改。
下面的代碼段可以做你想要的:
jq '{
"name": .name,
"values": [
{
"field1" : .values[0].field1[0],
"field2" : .values[0].field2[0],
"New_name": .values[0].name1
},
{
"field1" : .values[1].field1[0],
"field2" : .values[1].field2[0],
"new_name" : .values[1].name1
},
{
"field1" : .values[2].field1[0],
"field2" : .values[2].field2[0],
"new_name" : .values[2].name1
}
]
}' < /tmp/input.json
編輯
由於對象的數量不固定,下面的代碼段將執行:
jq '{
"name" : .name,
"values" : [
.values[] as $in |
{
"field1" : $in.field1[0],
"field2" : $in.field2[0],
"new_name" : $in.name1
}
]
}' < /tmp/input.json
這應該工作; 我不確定是否有辦法重構field1
和field2
的賦值:
jq '.values[] |= (.field1=.field1[0] | .field2=.field2[0])' tmp1.json
這是另一種解決方案。
.values |= map({
field1: .field1[0],
field2: .field2[0],
new_name: .name1
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.