【问题标题】:How to convert a string to an integer in a JSON file using jq?如何使用 jq 将字符串转换为 JSON 文件中的整数?
【发布时间】:2018-02-20 14:38:14
【问题描述】:

我使用 jq 将复杂的 json 对象转换为更小的对象。我的查询是:

jq 'to_entries[]| {companyId: (.key), companyTitle: (.value.title), companyCode: (.value.booking_service_code)}' companies.json

现在,(.key) 被解析为字符串,但我希望 companyId 成为数字。

我的结果目前如下所示:

{
  "companyId": "1337",
  "companyTitle": "Some company title",
  "companyCode": "oxo"
}

但它应该是这样的:

{
  "companyId": 1337,
  "companyTitle": "Some company title",
  "companyCode": "oxo"
}

【问题讨论】:

    标签: json casting jq


    【解决方案1】:

    jq 具有内置功能,您可以将密钥通过管道传递给tonumber

    jq 'to_entries[]| {companyId: (.key)|tonumber, companyTitle: (.value.title), companyCode: (.value.booking_service_code)}' companies.json
    

    根据文档:

    tonumber tonumber 函数将其输入解析为数字。它会 将格式正确的字符串转换为等效的数字, 留下数字,并在所有其他输入上给出错误。

    Example jq '.[] | tonumber' Input [1, "1"] Output 1 1

    【讨论】:

    • 在以某种方式处理空值的同时要这样做吗?
    • @Canovic 请根据该要求打开一个新问题。您可以在此处链接此答案。
    【解决方案2】:

    我试图将我的字符串(转换为浮点数)转换为整数。我一直在寻找“toint”函数,但不存在。

    jq --arg str "1.435" -n '$str|tonumber'
    1.435
    

    我在里面扔了一个地板,以确保创建的数字是一个整数:

    jq --arg str "1.435" -n '$str|tonumber|floor'
    1
    

    这也可以正确转换 OP 原始数据。如果你想保证你的结果是一个整数,你需要将它取底。

    【讨论】:

    • 或者round
    猜你喜欢
    • 1970-01-01
    • 2016-05-23
    • 2016-03-24
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 2021-09-03
    • 1970-01-01
    相关资源
    最近更新 更多