如何检查jq中是否存在数组或对象?

问题描述 投票:0回答:3

例如,我想从一个键中提取值,但该键有时包含一个对象(我的意思是只有一个值),有时包含一个数组(我的意思是多个值)。如何检查是否存在数组或对象?谢谢。

json jq
3个回答
38
投票

使用

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"

16
投票

我的字段有时是字符串有时是数组,我想迭代它们。 这处理了这种情况:

... | if type=="string" then [.] else . end | .[] | ...

0
投票

更简洁,但可能稍微慢一些:

... | [.] | flatten(1) | ...

所以,如果它不是一个数组,那么现在它就是一个数组。如果是的话,剥掉我们刚刚添加的层

© www.soinside.com 2019 - 2024. All rights reserved.