【问题标题】:jq: how to convert to number if possible, but leave as is, if not?jq:如果可能,如何转换为数字,如果没有,则保持原样?
【发布时间】:2017-02-05 11:32:03
【问题描述】:

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

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

会回来

123
"12x3"

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

对于错误处理的方式,我也试过了:

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

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

【问题讨论】:

    标签: javascript error-handling type-conversion jq


    【解决方案1】:

    你可以直接写:tonumber? // .

    或者作为一个函数:

    def tonumberq: tonumber? // .;
    

    【讨论】:

    • 你能扩展一下吗?我不确定如何使用它:echo '{"a":"1","b":"world"}' | jq 'map_values(tonumber? // .)' 产生输出 {"b":"world"} ``
    • @LucianWischik - 有一个讨厌的错误停止了吗?与 builtin.jq 中定义的 map_values 一起正常工作。改用这个定义:def map_values(f): with_entries(.value = (.value|f));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多