如何使用jq将字符串转换为JSON文件中的整数?

时间:2018-02-20 14:38:15

标签: json casting jq

我使用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"
}

2 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:1)

我试图将我的字符串(转换为浮点数)转换为整数。我正在寻找一种“ toint”功能,该功能不存在。

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

我在其中铺了一层地板,以确保创建的数字是整数:

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

这也可以正确转换OP原始数据。如果要保证,则结果是整数,则需要对其进行下限计算。