![](/img/trans.png)
[英]jq: how to add an object, key/value in a nested json tree with arrays
[英]How to add a nested key/value in a JSON file using jq
我是jq命令的新手,停留在編輯JSON文件的地方。 我有以下格式的JSON文件。
{
"service": {
"name": "web",
"tags": [
"contact_points"
],
"check": {
"script": "tmp/status_check.py > /dev/null 2>&1",
"interval": "10s"
}
}
}
我想修改此JSON以添加嵌套鍵/值,如下所示:
{
"service": [{
"name": "web",
"tags": [
"contact_points"
],
"check": {
"script": "tmp/status_check.py > /dev/null 2>&1",
"interval": "10s"
}
},
{
"name": "tomcat",
"tags": [
"contact_points"
],
"check": {
"script": "tmp/status_check.py > /dev/null 2>&1",
"interval": "10s"
}
}
]
}
我嘗試了以下命令,但它覆蓋了文件的內容。
jq'。 + {“ service”:“ {” name“:” tomcat“,” tags“:[” contact_points“],” check“:{” script“:” tmp / status_check.py> / dev / null 2>&1“ ,“ interval”:“ 10s”}}“}'/tmp/status.json> / tmp / file && mv / tmp / file /tmp/status.json
並給出以下輸出
{
"service": {
"name": "tomcat",
"tags": [
"contact_points"
],
"check": {
"script": "tmp/status_check.py > /dev/null 2>&1",
"interval": "10s"
}
}
}
我嘗試轉義特殊字符,但無法獲得所需的輸出。 還有其他方法可以實現這一目標嗎? 任何幫助是極大的贊賞。
感謝您更新問題。 由於在您的輸入.service
是一個對象,而在您的輸出.service
是一個數組,因此以下是使用輔助函數的解決方案:
def as_array:if type=="object" then [.] else . end;
.service |= as_array + [
{
"name": "tomcat",
"tags": [
"contact_points"
],
"check": {
"script": "tmp/status_check.py > /dev/null 2>&1",
"interval": "10s"
}
}
]
如果上面的過濾器在filter.jq
而您的示例數據在status.json
,則命令
$ jq -M -f filter.jq status.json
產生
{
"service": [
{
"name": "web",
"tags": [
"contact_points"
],
"check": {
"script": "tmp/status_check.py > /dev/null 2>&1",
"interval": "10s"
}
},
{
"name": "tomcat",
"tags": [
"contact_points"
],
"check": {
"script": "tmp/status_check.py > /dev/null 2>&1",
"interval": "10s"
}
}
]
}
如果要用此輸出替換現有的status.json,則可以使用moreutils這樣的解決方案,例如海綿(1)
$ jq -M -f filter.jq status.json | sponge status.json
如果您的目標只是采用單一服務並以新名稱復制它,則可以執行以下操作:
.service |= [., .name = "tomcat"]
https://jqplay.org/s/33L3zA9Fos
也就是說,通過創建一個包含當前項的數組和另一個副本,其中name
屬性為"tomcat"
,來更新服務屬性( .service |= ...
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.