Examples

Simple JSON

Consider this simple JSON file (simple.json):

[
  {
    "id": 1,
    "name": "Alice",
    "age": 30,
    "city": "New York"
  },
  {
    "id": 2,
    "name": "Bob",
    "age": 25,
    "city": "Los Angeles"
  },
  {
    "id": 3,
    "name": "Charlie",
    "age": 35,
    "city": "Chicago"
  }
]

Select all fields:

jonq simple.json "select *"

Output:

[
  {
    "id": 1,
    "name": "Alice",
    "age": 30,
    "city": "New York"
  },
  {
    "id": 2,
    "name": "Bob",
    "age": 25,
    "city": "Los Angeles"
  },
  {
    "id": 3,
    "name": "Charlie",
    "age": 35,
    "city": "Chicago"
  }
]

Select specific fields:

jonq simple.json "select name, age"

Output:

[
  {
    "name": "Alice",
    "age": 30
  },
  {
    "name": "Bob",
    "age": 25
  },
  {
    "name": "Charlie",
    "age": 35
  }
]

Filter with conditions:

jonq simple.json "select name, age if age > 30"

Output:

[
  {
    "name": "Charlie",
    "age": 35
  }
]

Sorting:

jonq simple.json "select name, age sort age desc 2"

Output:

[
  {
    "name": "Charlie",
    "age": 35
  },
  {
    "name": "Alice",
    "age": 30
  }
]

Aggregation:

jonq simple.json "select sum(age) as total_age"

Output:

{
  "total_age": 90
}

Nested JSON

For more complex, nested JSON files:

[
  {
    "id": 1,
    "name": "Alice",
    "profile": {
      "age": 30,
      "address": {
        "city": "New York",
        "zip": "10001"
      }
    },
    "orders": [
      {
        "order_id": 101,
        "item": "Laptop",
        "price": 1200
      },
      {
        "order_id": 102,
        "item": "Phone",
        "price": 800
      }
    ]
  },
  {
    "id": 2,
    "name": "Bob",
    "profile": {
      "age": 25,
      "address": {
        "city": "Los Angeles",
        "zip": "90001"
      }
    },
    "orders": [
      {
        "order_id": 103,
        "item": "Tablet",
        "price": 500
      }
    ]
  }
]

Query nested fields:

jonq nested.json "select name, profile.age"

Output:

[
  {
    "name": "Alice",
    "age": 30
  },
  {
    "name": "Bob",
    "age": 25
  }
]

Access deeply nested fields:

jonq nested.json "select name, profile.address.city"

Output:

[
  {
    "name": "Alice",
    "city": "New York"
  },
  {
    "name": "Bob",
    "city": "Los Angeles"
  }
]

Count items in arrays:

jonq nested.json "select name, count(orders) as order_count"

Output:

[
  {
    "name": "Alice",
    "order_count": 2
  },
  {
    "name": "Bob",
    "order_count": 1
  }
]

Complex filtering:

jonq nested.json "select name, profile.age if profile.address.city = 'New York' or orders[0].price > 1000"

Output:

[
  {
    "name": "Alice",
    "age": 30
  }
]

Group by with aggregation:

jonq nested.json "select profile.address.city, avg(profile.age) as avg_age group by profile.address.city"

Output:

[
  {
    "city": "New York",
    "avg_age": 30
  },
  {
    "city": "Los Angeles",
    "avg_age": 25
  }
]