Working with JSON in PostgreSQL, why?
Tags: postgres, apacheage, opensource, tutorial
Published: 2023-10-02 12:28:18

You may be using JSON to extract data from an API and use it, but you need to find a way to store it if you ever wanted to use it in the future. However, that's a big problem when you don't know what the heck is going on with it as it keeps changing everytime you request a new API call depending on the usecase. So, you may be wondering, if you could store this in a database of some sort, you know, something that let's you prost-gress further! Enter, PostgreSQL, the only database system that you'd ever need, and hey, it's free!

Let's explore how PostgreSQL enables us to store, query, and manipulate JSON data more easily, with a slight more focus on the JSONB data type.

# Why JSON in PostgreSQL?

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tv7y7kll0twj5yonlddk.png)

JSON (JavaScript Object Notation) has established itself as the de facto standard for data interchange in contemporary web applications. Its elegance and human-readable format have endeared it to developers and data enthusiasts alike. PostgreSQL's innate support for JSON data seamlessly integrates this structured yet flexible data format into its database. JSON data can be indexed for swift retrieval, searched with finesse, and molded to suit diverse requirements. It's like having the best of both worlds.


# JSON vs. JSONB: What Distinguishes Them?

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pc95je5k587fdu4bsgra.png)


PostgreSQL offers you two kinds for handling JSON data, namely the JSON and JSONB.

**JSON**: It's more like the textual rendition of structured data and is easily decipherable and adaptable to human interaction - however, it may not be the fastest when it comes to querying and indexing, as it stores data in a non-binary format.

**JSONB**: This is the star of the show, as it employs binary encoding to compactly and efficiently store data making it the preferred choice for most applications, thanks to its ability to accelerate queries compared to JSON.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7pq53e9wjinms2i7hqq9.png)


## Storing JSON Data

Storing JSON data in PostgreSQL is as straightforward as a stroll in the park. You create a table with a JSON or JSONB column and then insert your JSON documents. Let's sample the experience:

```sql
CREATE TABLE products (
    id serial PRIMARY KEY,
    name text,
    attributes JSONB
);

INSERT INTO products (name, attributes)
VALUES ('Product A', '{"color": "red", "size": "medium"}');
```
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tl63ew1pkgsytwj3ulrd.png)

## Querying JSON Data

PostgreSQL boasts a diverse set of operators and functions designed for navigating JSON data. You can pluck specific JSON properties, sift through rows based on JSON values, and even perform intricate maneuvers. Here are some eloquent examples:

**Extract a JSON property:**
```sql
SELECT attributes->>'color' FROM products WHERE name = 'Product A';
```

**Winnow rows based on JSON values:**
```sql
SELECT * FROM products WHERE attributes @> '{"size": "medium"}';
```

**Refine JSON data with finesse:**
```sql
UPDATE products
SET attributes = jsonb_set(attributes, '{color}', '"blue"')
WHERE name = 'Product A';
```

## Enhance Your Queries with Indexing

To turbocharge your query performance, PostgreSQL empowers you to erect indexes on JSONB columns. This is particularly invaluable when grappling with colossal datasets. Behold the mystical incantation:

```sql
CREATE INDEX idx_color ON products USING GIN (attributes jsonb_path_ops);
```

## And? That's all?

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z2adglefz7upzrahxl8y.png)

No. PostgreSQL's embrace of JSON extends far beyond rudimentary functions. You can delve into the world of nested JSON structures, orchestrate aggregations, and wield sophisticated functions like jsonb_array_elements to extract elements from JSON arrays. It's like having a Swiss Army knife for data manipulation.

## Real-world JSON Expeditions

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ud9rv8tmbqaucn0owbjv.png)

Where does JSON shine in the real world, you ask? It's not merely reserved for straightforward scenarios. Here are some illustrious applications:

- Storing configuration data in a structured format.
- Managing user profiles embellished with bespoke attributes.
- Unraveling the mysteries of logging and monitoring, especially in domains where data schemas possess the flexibility of a slinky.
- Constructing APIs that converse in JSON, welcoming and dispatching data in a format that developers adore.

## In Conclusion

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i68a5g3alwwbcx4ipe7y.png)

PostgreSQL's dalliance with JSON and JSONB data types unveils a treasure trove of opportunities for developers and data enthusiasts. Whether you're crafting a web application that thrives on JSON or need to navigate the labyrinth of semi-structured data, PostgreSQL stands as your steadfast companion. As you acquaint yourself with the nuances between JSON and JSONB, master the art of storing and querying JSON data, harness the potency of indexing for expeditious searches, and explore the realm of advanced JSON features, PostgreSQL transforms the world of data into a playground where the JSON adventure begins.