2015-09-11 63 views
1

說我有這樣的JSON:編輯項目和打印的全部內容與JQ

{ 
    "user" : 
    { 
     "name": "Manu", 
     "songs": 30 
    }, 
    "admin" : 
    { 
     "name": "Chao", 
     "songs": 50 
    } 
} 

我想更換user -> songs 40和打印整個文件,讓我得到:

{ 
    "user" : 
    { 
     "name": "Manu", 
     "songs": 40  <------ this is the line to change 
    }, 
    "admin" : 
    { 
     "name": "Chao", 
     "songs": 50 
    } 
} 

我該怎麼做jq(使用jq version 1.3)?我嘗試以下,這成功地取代了價值,但是,那麼,不打印整個事情:

$ jq "[.user | { "name": .name, "songs": 40 }]" myfile 
[ 
    { 
    "songs": 40, 
    "name": "Manu" 
    } 
] 

回答

3

使用賦值運算符:

jq '.user.songs = 40' myfile 
與賦值運算符,則「打印內容」
+0

所以自動完成? – fedorqui

+0

我這麼認爲。我必須承認,我不確定這是否會奏效,直到我嘗試過。我的猜測是作業與其他「選擇」過濾器「分開」,因此缺少任何其他選擇,整個輸出被打印。 – chepner

+0

這是個好消息。現在我閱讀[jq手冊 - >基本過濾器](https://stedolan.github.io/jq/manual/#Basicfilters):_絕對最簡單(也是最不感興趣的)過濾器是..這是一個過濾器,需要它輸入並將其作爲輸出生成。 – fedorqui