如果是 jq 数组中的对象或字符串,则获取值

Sad*_*ddy 5 bash json jq

我有一个 JSON 对象,如下所示:

[{"name":"NAME_1"},"NAME_2"]
Run Code Online (Sandbox Code Playgroud)

我想要一个输出

["NAME_1", "NAME_2"]
Run Code Online (Sandbox Code Playgroud)

数组中的某些条目是带有“名称”键的对象,有些只是名称的字符串。我正在尝试提取名称数组。使用

jq -cr '.[].name // []'
Run Code Online (Sandbox Code Playgroud)

当它尝试索引字符串对象的 .name 时抛出错误。有没有办法检查它是否是字符串,如果是,则只需使用它的值而不是 .name ?

gle*_*man 6

echo \'[{"name":"NAME_1"},"NAME_2"]\' \\\n| jq \'[ .[] | if (.|type) == "object" then .name else . end ]\'\n
Run Code Online (Sandbox Code Playgroud)\n
[\n  "NAME_1"\n  "NAME_2"\n]\n
Run Code Online (Sandbox Code Playgroud)\n

参考:

\n\n
\n

正如 @L\xc3\xa9aGris 评论的那样,一个更简单的版本

\n
jq \'[ .[] | .name? // . ]\' file\n
Run Code Online (Sandbox Code Playgroud)\n\n

  • 或者作为 try catch 机制,将替代运算符 `//` 与错误取消 `?` 相结合: `jq --argjson a '[{"name":"NAME_1"},"NAME_2"]' -n '[ $一个[] | 。姓名?// . ]'` (3认同)