我使用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"
}
答案 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原始数据。如果要保证,则结果是整数,则需要对其进行下限计算。