我使用 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"
}
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
我试图将我的字符串(转换为浮点数)转换为整数。我一直在寻找“toint”功能,但不存在。
jq --arg str "1.435" -n '$str|tonumber'
1.435
我在那里扔了一个地板,以确保创建的数字是一个整数:
jq --arg str "1.435" -n '$str|tonumber|floor'
1
这也可以正确转换 OP 原始数据。如果您想保证您的结果是一个整数,您需要将其取整。
警告:使用 tonumber 将删除任何前缀零,例如: “数据”:{“订单号”:“024058275”=> 24058275
使用 sed (或 awk )删除 ' " '
echo $result | jq '.data.order_number' | sed 's|["]||g'
这将返回 024058275