How to convert a key-value pair into JSON. While there are many ways to programmatically do it. I often find myself doing this type of conversion quite often and I looked out for a simple solution.
What can be simpler than having it done with the built-in tools of your Linux/mac like awk
So here is the quick snippet to converts the key=value
pairs into a JSON format
As you know JSON enquotes the key and value in doublequotes
so which has also been addressed part of this.
So let us consider a sample key-value data given below.
username=sarav secret=YouOweMeaBeer address=virtualspaceovertheweb website=gritfy.com about=aspirer [email protected] skills=['daydreaming','writing','music']
I have saved this content into a file named test.env
and converting it now to the JSON with the following command
This is the Shell script with awk to convert key value pair into JSON
#!/bin/bash # sarav ([email protected]) # convert key=value to json # Created at Gritfy ( Devops Junction ) # file_name=$1 last_line=$(wc -l < $file_name) current_line=0 echo "{" while read line do current_line=$(($current_line + 1)) if [[ $current_line -ne $last_line ]]; then [ -z "$line" ] && continue echo $line|awk -F'=' '{ print " \""$1"\" : \""$2"\","}'|grep -iv '\"#' else echo $line|awk -F'=' '{ print " \""$1"\" : \""$2"\""}'|grep -iv '\"#' fi done < $file_name echo "}"
Just copy and paste the snippet given above into a file with .sh
extension
give executable permission to the script
chmod a+x /tmp/keytojson.sh
then execute the script with the file name where you have the key=value data
keytojson.sh /tmp/test.env
you would be presented with the fully constructed JSON like this
without having to use the script all the time. There is an easy way.
Add following the content to your user profile file ~/.zshrc
or ~/bashrc
function keytojson { file_name=$1 last_line=$(wc -l < $file_name) current_line=0 echo "{" while read line do current_line=$(($current_line + 1)) if [[ $current_line -ne $last_line ]]; then [ -z "$line" ] && continue echo $line|awk -F'=' '{ print " \""$1"\" : \""$2"\","}'|grep -iv '\"#' else echo $line|awk -F'=' '{ print " \""$1"\" : \""$2"\""}'|grep -iv '\"#' fi done < $file_name echo "}" }
Now you can simply use keytojson
it without having to remember the location of the script. Just like any other Linux command
See it in use.
This keytojson
is mostly useful in converting .env
files to JSON format. so we can call this envtojson
as well.
If you are looking for Automations like this as a service. Try us
Cheers
Sarav AK
Follow me on Linkedin My Profile Follow DevopsJunction onFacebook orTwitter For more practical videos and tutorials. Subscribe to our channel
Signup for Exclusive "Subscriber-only" Content