Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Filter JSON on the command line

I want to filter JSON on the command line.

Task: print the "name" of each dictionary in the json list.

Example json:

[
   {
      "id":"d963984c-1075-4d25-8cd0-eae9a7e2d130",
      "extra":{
         "foo":false,
         "bar":null
      },
      "created_at":"2020-05-06T15:31:59Z",
      "name":"NAME1"
   },
   {
      "id":"ee63984c-1075-4d25-8cd0-eae9a7e2d1xx",
      "name":"NAME2"
   }
]

Desired output:

NAME1
NAME2

This script would work:

#!/usr/bin/env python

import json
import sys

for item in json.loads(sys.stdin.read()):
    print(item['name'])

But since I am very lazy, I am looking for a solution where I need to type less. For example in on the command line in a pipe:

curl https://example.com/get-json | MAGIC FILTER

I asked at code golf but they told me that it would make more sense to ask here.

like image 260
guettli Avatar asked Oct 30 '25 01:10

guettli


1 Answers

You can use jq https://stedolan.github.io/jq/manual/

% curl https://example.com/get-json | jq -r '.[].name'
NAME1
NAME2
  • -r if the filter's result is a string then it will be written directly to standard output rather than being formatted as a JSON string with quotes
like image 156
paiv Avatar answered Nov 01 '25 17:11

paiv



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!