在下面的 jq 脚本中,我想打印
first_name
和 last_name
的串联或仅打印 last_name
。
$ echo '{"first_name": "John", "last_name": "Johnson"}' | jq -c '{
"name": (if (.last_name | startswith(.first_name))
then .last_name
else .first_name + " " + .last_name
end)
}'
错误是
jq: error (at <stdin>:1): Cannot index string with string "first_name"
jq 命令在调用
startswith
时失败 - 就好像 startswith
只接受字符串文字一样。如果我将 startswith(.first_name)
更改为 startswith("John")
,则表达式将按预期编译并工作。
在现实世界的示例中,有许多输入记录和许多不同的
first_name
。有没有办法可以将 .first_name
插入 startswith
?
您使用
startswith
是正确的,但是使用 |
您将开始一个新的上下文(即 .last_name
),其中 .first_name
不再有效。
一般来说,要稍后引用一个值(当它脱离上下文时),请在它仍在上下文中时将变量绑定到它,然后再使用它:
if .first_name as $fn | .last_name | startswith($fn) then …