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

62

我使用 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个回答

78

jq 内置函数,您可以将键名传递给tonumber

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

根据文档:

tonumber 函数将其输入解析为数字。它会将格式正确的字符串转换为其数值等价形式,保留数字不变,并针对所有其他输入发生错误。

示例:jq '.[] | tonumber' Input [1, "1"] Output 1 1


有没有办法在处理空值的同时完成这个操作? - Canovice
@Canovice 请开一个新问题来提出您的需求。您可以在那里链接这个答案。 - k0pernikus

8
我试图将我的字符串(可以转换为浮点数)转换为整数。我正在寻找一个“toint”函数,但它不存在。
jq --arg str "1.435" -n '$str|tonumber'
1.435

我加入了一个floor函数来确保所创建的数字为整数:

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

这也可以正确地转换原始数据。如果你想保证结果是一个整数,你需要对它进行向下取整(floor)操作。

1
或者是 round - peak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接