(很難想出總結問題的標題,因此可以隨意改進它)。使用jq解析存在於兩個列表中的鍵(即使它可能不存在於其中一個列表中)
我有以下內容的JSON文件:
{
"Items": [
{
"ID": {
"S": "ID_Complete"
},
"oldProperties": {
"L": [
{
"S": "[property_A : value_A_old]"
},
{
"S": "[property_B : value_B_old]"
}
]
},
"newProperties": {
"L": [
{
"S": "[property_A : value_A_new]"
},
{
"S": "[property_B : value_B_new]"
}
]
}
},
{
"ID": {
"S": "ID_Incomplete"
},
"oldProperties": {
"L": [
{
"S": "[property_B : value_B_old]"
}
]
},
"newProperties": {
"L": [
{
"S": "[property_A : value_A_new]"
},
{
"S": "[property_B : value_B_new]"
}
]
}
}
]
}
我想要操縱以這樣的方式使用jq
數據,對於在Items[]
具有新值的每個項目對於property_A(在newProperties list)生成一個輸出與相應的ID,老和新(見下面所希望的輸出)的字段而不管該性質在oldProperties具有列表中的值的。此外,如果property_A不會在oldProperties存在,我仍然需要老場與null
(或什麼是值得任何固定字符串)來填充。
所需的輸出:
{
"id": "id_Complete",
"old": "[property_A : value_A_old]",
"new": "[property_A : value_A_new]"
}
{
"id": "ID_Incomplete",
"old": null,
"new": "[property_A : value_A_new]"
}
注:即使property_A不會在oldProperties存在名單,其他屬性可以(也會)存在。
我現在面臨的問題是,我不能夠得到時所需的屬性不會在oldProperties存在列表的輸出。我現在jq
命令如下:
jq -r '.Items[] |
{ id:.ID.S,
old:.oldProperties.L[].S | select(. | contains("property_A")),
new:.newProperties.L[].S | select(. | contains("property_A")) }'
這使得只有ID_Complete情況下,當我需要其他的爲好。
有什麼辦法可以使用這個工具來實現這個嗎?
在此先感謝。
真棒回覆,謝謝。這個和其他的工作。然而,在接受之前,我會在已經存在的系統中嘗試使用它們,並且看看哪一個可以更好地適應它(因爲問題提供了一小部分數據的工作和修正示例)。 – Nacho