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

问题描述 投票:0回答:3

我使用 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
3个回答
82
投票

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


8
投票

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

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

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

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

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


0
投票

警告:使用 tonumber 将删除任何前缀零,例如: “数据”:{“订单号”:“024058275”=> 24058275

使用 sed (或 awk )删除 ' " '

echo $result | jq '.data.order_number' | sed 's|["]||g'

这将返回 024058275

© www.soinside.com 2019 - 2024. All rights reserved.