Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
922 views
in Technique[技术] by (71.8m points)

casting - How to convert a string to an integer in a JSON file using jq?

I use jq to transform a complex json object into a tinier one. My query is:

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

Now, the (.key) is parsed as a string, yet I want companyId to be a number.

My result currently looks like this:

{
  "companyId": "1337",
  "companyTitle": "Some company title",
  "companyCode": "oxo"
}

yet it should be like:

{
  "companyId": 1337,
  "companyTitle": "Some company title",
  "companyCode": "oxo"
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

jq has inbuilt functions, you can pipe your key to tonumber:

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

As per the docs:

tonumber The tonumber function parses its input as a number. It will convert correctly-formatted strings to their numeric equivalent, leave numbers alone, and give an error on all other input.

Example jq '.[] | tonumber' Input [1, "1"] Output 1 1


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...