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" }
String data can be easily converted to JSON using the stringify() function, and also it can be done using eval() , which accepts the JavaScript expression that you will learn about in this guide.
The safest way to create JSON on the command line is through using a tool that constructs it for you as jq does.
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
Thetonumber
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With