jq:如果可能的话如何转换为数字,如果没有则保持原样?

mwa*_*wag 2 javascript error-handling type-conversion jq

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

echo '["123","12x3"]' | jq '.[] | some_function'
Run Code Online (Sandbox Code Playgroud)

会回来

123
"12x3"
Run Code Online (Sandbox Code Playgroud)

如果我可以在发生错误时有一些后备,那么 tonumber() 函数就可以正常工作。一些潜在的解决方案可能是允许错误处理,例如 iferror(xxx, result_if_error),或者有某种“安全”的 tonumber() 函数,但我找不到一种方法可以让这两种解决方案在 jq 中工作。

对于错误处理方法,我也尝试过:

echo '["123","12x3"]' | jq 'map(try tonumber catch .) '
Run Code Online (Sandbox Code Playgroud)

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

pea*_*eak 7

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

或者作为一个函数:

def tonumberq: tonumber? // .;
Run Code Online (Sandbox Code Playgroud)