2016-11-25 37 views
0

我有這個JSON文件:獲取JSON文件中的最後一個元素

{ 
     "system.timestamp": "{system.timestamp}", 
     "error.state": "{error.state}", 
     "system.timestamp": "{system.timestamp}", 
     "error.state": "{error.state}", 
     "system.timestamp": "{system.timestamp}", 
     "error.state": "{error.state}", 
     "error.content": "{custom.error.content}" 
} 

我想只得到JSON文件的最後一個對象,我需要檢查,在任何情況下,最後目標是error.content。代碼的附加部分只是一個示例文件,實際生成的每個文件至少包含大約40到50個對象,因此在每種情況下,我都需要檢查最後一個對象是否爲error.content

我已經使用jq '. | length'計算了長度。我該如何在Linux中使用jq命令?

注意:這是一個普通的JSON文件,沒有任何數組。

+1

這不是JSON ......好吧,從技術上講,我想你可以說是的。但使用_many_重複鍵的對象實際上毫無價值。任何自尊的JSON解析器只會刪除/覆蓋重複的屬性,並可能會保持最後。修復它比在該狀態下嘗試使用它更好。 –

回答

1

對象與使用--stream選項,如重複鍵可以在JQ進行處理:

$ jq -s --stream '.[length-2] | { (.[0][0]): (.[1]) }' input.json 
{ 
    "error.content": "{custom.error.content}" 
} 

對於大文件,以下可能會更好,因爲它避免了「啜」輸入文件:

$ jq 'first(tostream) | {(.[0][0]): .[1]} ' input.json 
相關問題