Visit The New, Modern Unix Linux Community


How to convert any shell command output to JSON format?


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers How to convert any shell command output to JSON format?
# 8  
Quote:
Originally Posted by apmcd47
@NEO, I don't generally do much with JSON, and find JQ is a good tool for pretty-printing, or extracting data from a JSON file. If I wanted to manipulate JSON data, I would probably use python, just as you use PHP.

Andrew
I should probably start using Python for routine tasks more .... it time I got off my dependance on PHP in the shell and start doing more in Python, me thinks.

Thanks Andrew.
This User Gave Thanks to Neo For This Post:
# 9  
jc json conversion tool

I created a tool called jc that converts the output of many command line tools, including df, to json format:

kellyjonbrazil/jc on github.
Code:
$ df | jc --df -p
[
  {
    "filesystem": "udev",
    "1k-blocks": "977500",
    "used": "0",
    "available": "977500",
    "use_percent": "0%",
    "mounted": "/dev"
  },
  {
    "filesystem": "tmpfs",
    "1k-blocks": "201732",
    "used": "1204",
    "available": "200528",
    "use_percent": "1%",
    "mounted": "/run"
  },
  {
    "filesystem": "/dev/sda2",
    "1k-blocks": "20508240",
    "used": "5748312",
    "available": "13695124",
    "use_percent": "30%",
    "mounted": "/"
  },
  {
    "filesystem": "tmpfs",
    "1k-blocks": "1008648",
    "used": "0",
    "available": "1008648",
    "use_percent": "0%",
    "mounted": "/dev/shm"
  }
  ...
]

This User Gave Thanks to kbrazil For This Post:
# 10  
Hi, kbrazil.
Thanks for the code. I installed it, tried it out, and it worked as expected.

For your next rev, I suggest:
Code:
jc [-p] -- "command"

So that jc -- "du" would run the du command from within python without me needing to specify du (or any other command for which you have a parser) twice

I've done that with perl a few times, but I don't know enough about python to say any more about it on that language platform ... cheers, drl

Last edited by drl; 11-01-2019 at 02:15 PM..
# 11  
Quote:
Originally Posted by drl
Hi, kbrazil.
Thanks for the code. I installed it, tried it out, and it worked as expected.

For your next rev, I suggest:
Code:
jc [-p] -- "command"

So that jc -- "du" would run the du command from within python without me needing to specify du (or any other command for which you have a parser) twice

I've done that with perl a few times, but I don't know enough about python to say any more about it on that language platform ... cheers, drl
Hi DRL,

You can now use this style of synax with the latest version of jc!

Cheers,
kb
# 12  
Hi, kbrazil.

Thanks for the update.
I ran this to update (as I had done earlier to do the initial install):
Code:
pip3 install --upgrade jc

but this is what I got:
Code:
No files/directories in /tmp/pip-build-wg68rqx6/ruamel.yaml.clib/pip-egg-info (from PKG-INFO)
Storing debug log for failure in /root/.pip/pip.log

On a system:
Code:
OS, ker|rel, machine: Linux, 3.16.0-7-amd64, x86_64
Distribution        : Debian 8.11 (jessie) 
Python 3.4.2
pip3 pip 1.5.6 from /usr/lib/python3/dist-packages (python 3.4)

Let me know if you see something wrong here. Do you want me to post this as an issue on github?

However, I got:
Code:
...
Successfully built ifconfig-parser
Installing collected packages: ruamel.yaml.clib, ruamel.yaml, xmltodict, ifconfig-parser, jc
Successfully installed ifconfig-parser-0.0.5 jc-1.7.4 ruamel.yaml-0.16.10 ruamel.yaml.clib-0.2.0 xmltodict-0.12.0

On a system:
Code:
OS, ker|rel, machine: Linux, 5.4.0-4-amd64, x86_64
Distribution        : Debian GNU/Linux bullseye/sid 
Python 3.7.6
pip3 pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7)

And the command jc -p ls -l /usr/bin appeared to work correctly on that system.

Best wishes, cheers, drl

Last edited by drl; 02-23-2020 at 08:23 AM.. Reason: Add information.
# 13  
Hi DRL,

Sorry I just saw your post. I'm not sure why the yaml library didn't install via PIP on that system. Perhaps there was an issue with PIP or a conflict with another library? Might make sense to try installing it in a venv on that system to see if it works in a clean environment.

Ultimately it won't break anything unless you try to use the yaml parser on that system.

Actually taking a closer look, it seems the version of Python might be too old on the Debian 8.11 system. I would ensure the Python version on the system is at least 3.6.

Cheers,
kb
# 14  
Hi, kb.

Thanks. As I noted, it did install and execute correctly on a more recent system, so I'll need to use it there. Thanks for your time and effort ... cheers, drl

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #16
Difficulty: Easy
There are a total of 25 pins in the traditional parallel port of a computer system.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Printing df -h output in json format

Hi All, i am trying to print the df -h ouput in json format. using below script. #!/usr/bin/env bash df -h > /tmp/sdf nawk '{print " "$1" "$2" "$3" "$4" "$5" "$6" "}' /tmp/sdf > /tmp/sdf1 nawk 'NR==1 { for (i=1; i<=NF; i++) { f = i }}{ print $(f), $(f), $(f), $(f), ... (2 Replies)
Discussion started by: sravani25
2 Replies

2. UNIX for Beginners Questions & Answers

Convert String to an Array using shell scripting in JSON file.

This is the sample json I have pasted here. I want all the IP address strings to be converted into an array. For example "10.38.32.202" has to be converted to everywhere in the JSON. There are multiple IPs in a JSON I am pasting one sample object from the JSON. But the IPs already in an Array... (11 Replies)
Discussion started by: vinshas1
11 Replies

3. UNIX for Beginners Questions & Answers

Convert rows to column and print output in required format

Hi All, i am trying to print the solaris 11 packages in below required format, But i am unable to do that. Current ouput : root@abc# pkginfo -l | egrep '(BASEDIR|NAME|VERSION)' | awk '{print}' NAME: QLogic 570x/571x Gigabit Ethernet Driver VERSION: 11.11,REV=2009.11.11 ... (7 Replies)
Discussion started by: balu1234
7 Replies

4. Shell Programming and Scripting

JSON Output format

Dear friends, I'm getting below API result and i would like to format them with Shell scripting. Input "id": 9, "description": "short desc", "name": "test", "name_with_namespace": "ABCD-PDFF-PLATFORM-TEST-V1 / test", "path": "test", "path_with_namespace":... (7 Replies)
Discussion started by: baluchen
7 Replies

5. Shell Programming and Scripting

Loop to convert text output in the HTML format

Hello Everyone, I have a sample file raw.txt as shown below : Drive Bays Bay Name : SD-2C Number of Standby Power Supplies : 4 Number of Drive Enclosures : 12 Summary Status of Contained Modules All... (6 Replies)
Discussion started by: rahul2662
6 Replies

6. Shell Programming and Scripting

Convert json to xml

Hello everyone, I have created a workflow that will pull down data via a RESTful API in JSON, then my code parses and modifies said data. The problem I have is that these APIs I am working with only accept XML to PUT/POST data, and I am looking for an easy way to convert my JSON file to XML. ... (2 Replies)
Discussion started by: Zaphod_B
2 Replies

7. Shell Programming and Scripting

Multiple records need to convert UNIXtime to human readable datatime and all output in one format

Hello Experts, Below is the record i have: sample data attached I want this record of each row to be in single line and there are multiple rowise unixtime mentioned e.g 11996327 , This needs to be converted to Human readdable data and time from multiple rows Can you help me , it will be... (10 Replies)
Discussion started by: manishK
10 Replies

8. Shell Programming and Scripting

Convert TZ output to a different format

Friends, I am trying to convert my local server timezone EST to UTC and for which I used the TZ command, see below $ date Thu Dec 6 10:14:14 EST 2012 $ $ TZ=UTC date -d '10:14 EST' Thu Dec 6 15:14:00 UTC 2012 Now I would like to have the same output in 'yyyymmdd hh:mm' format. ... (4 Replies)
Discussion started by: vivek_damodaran
4 Replies

9. Shell Programming and Scripting

convert the output in table format

Hi All, I have a output like below values val1=test.com val2=10.26.208.11 val3=en1 val4=test-priv1.com val5=192.168.3.4 val6=en2 val7=test-priv2.com val8=192.168.4.4 val9=en3 val10=test-vip.com val11=10.26.208.9 val12=$val3 I want to convet this output values into below... (1 Reply)
Discussion started by: kamauv234
1 Replies

10. Shell Programming and Scripting

shell script to format command output

Hello team, I am running below command which is giving following output. bash-3.00$ ps -eo pid,pcpu,args | sort +1n | grep -i java 12 0.0 grep -i java 8804 0.0 /opt/app/ccr/home/ccr/WebSphere/AppServer/java/bin/sparcv9/java -XX:+UnlockDiag 9241 0.0... (7 Replies)
Discussion started by: coolguyamy
7 Replies

Featured Tech Videos