jq:如果可能,如何转换为数字,如果不能,则保持原样?

jq: how to convert to number if possible, but leave as is, if not?

如何在 jq 中创建 some_function,如果可能,它会转换为数字,但如果不能,则保持原样?例如:

echo '["123","12x3"]' | jq '.[] | some_function'

会return

123
"12x3"

tonumber() 函数可以正常工作,如果我能在发生错误时有一些回退的话。一些潜在的解决方案可能是允许错误处理,例如iferror(xxx, result_if_error),或具有某种 "safe" tonumber() 函数,但我找不到在 jq 中使用任一解决方案的方法。

错误处理方式,我也尝试过:

echo '["123","12x3"]' | jq 'map(try tonumber catch .) '

(以及等效的用户定义函数)无济于事。我猜这个问题有一个简单的解决方案,但我似乎找不到它。

你可以简单地写:tonumber? // .

或作为函数:

def tonumberq: tonumber? // .;