2017-07-03 71 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'