如何使用.fieldname到jq的startswith

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

在下面的 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

jq startswith
1个回答
0
投票

您使用

startswith
是正确的,但是使用
|
您将开始一个新的上下文(即
.last_name
),其中
.first_name
不再有效。

一般来说,要稍后引用一个值(当它脱离上下文时),请在它仍在上下文中时将变量绑定到它,然后再使用它:

if .first_name as $fn | .last_name | startswith($fn) then …
© www.soinside.com 2019 - 2024. All rights reserved.