我有一个JSON对象,如下所示:
[{"name":"NAME_1"},"NAME_2"]
我想要…的输出
["NAME_1", "NAME_2"]
数组中的一些条目是一个具有键" name“的对象,还有一些只是名称的字符串。我正在试图提取一个数组的名字。使用
jq -cr '.[].name // []'
在尝试索引字符串对象的.name时抛出一个错误。是否有一种方法来检查它是否是字符串,如果是的话,只使用它的值而不是.name?
发布于 2022-06-29 05:10:26
echo '[{"name":"NAME_1"},"NAME_2"]' \
| jq '[ .[] | if (.|type) == "object" then .name else . end ]'
[
"NAME_1"
"NAME_2"
]
参考:
@LéaGris的评论,一个更简单的版本
jq '[ .[] | .name? // . ]' file
发布于 2022-06-29 05:09:23
您可以使用type
函数来返回对象的"object"
。
jq '.[] | if type == "object" then .name else . end' file.json
要以数组的形式获得输出,只需将整个表达式包装到[ ... ]
中即可。
https://stackoverflow.com/questions/72801812
复制