Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

json

casting

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" } 
like image 403
k0pernikus Avatar asked Feb 20 '18 14:02

k0pernikus


People also ask

How do I convert a string to JSON?

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.

Can JQ write JSON?

The safest way to create JSON on the command line is through using a tool that constructs it for you as jq does.


1 Answers

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

like image 180
k0pernikus Avatar answered Oct 03 '22 01:10

k0pernikus