例如,我想从一个键中提取值,但该键有时包含一个对象(我的意思是只有一个值),有时包含一个数组(我的意思是多个值)。如何检查是否存在数组或对象?谢谢。
使用
type
功能:
type
type 函数以字符串形式返回其参数的类型, 它是 null、布尔值、数字、字符串、数组或对象之一。
示例1:
echo '[0, false, [], {}, null, "hello"]' | jq 'map(type)'
[
"number",
"boolean",
"array",
"object",
"null",
"string"
]
示例2:
echo '[0,1]' | jq 'if type=="array" then "yes" else "no" end'
"yes"
示例3:
echo '{"0":0,"1":1}' | jq 'if type=="array" then "yes" else "no" end'
"no"
我的字段有时是字符串有时是数组,我想迭代它们。 这处理了这种情况:
... | if type=="string" then [.] else . end | .[] | ...
更简洁,但可能稍微慢一些:
... | [.] | flatten(1) | ...
所以,如果它不是一个数组,那么现在它就是一个数组。如果是的话,剥掉我们刚刚添加的层