2017-07-03 70 views
1

我想解析一個json,因爲它的類型有時會有所不同。如果json是一個數組,我需要獲取第一個元素,否則我只需要該元素!下面是我試圖研究的更簡單的版本。根據類型使用jq解析json

#!/bin/bash 

word='[0,1]' 
word=$(echo $word | jq 'if type=="array" then "'$word[0]'" else "'$word'" end') 
echo $word 

它輸出"[0,1][0]"其中如我所料的通過條件將被分配給該變量,這僅僅是0。因爲在下面的情況下,它只是印刷「是」。

#!/bin/bash 

word='[0,1]' 
word=$(echo $word | jq 'if type=="array" then "yes" else "no" end') 
echo $word 

爲什麼會有差異以及如何實現前者?

+0

你明確地與周圍的字面雙引號你的價值。這意味着你*要求*將它視爲一個字符串,而不是表達式提取列表的第一個元素。 –

+0

如果數組是空的,該怎麼辦? – peak

+0

我在主代碼中以不同的方式處理了這個問題 – Nobody

回答

3

您可以使用.[0]返回第一個數組項:

echo "$word" | jq 'if type=="array" then .[0] else . end'