Home > Database > Mysql Tutorial > Working with JSON in MySQL

Working with JSON in MySQL

Patricia Arquette
Release: 2025-01-06 20:30:41
Original
721 people have browsed it

In modern application development, managing semi-structured data is a common challenge. MySQL's support for JSON, introduced in version 5.7, provides a powerful way to store, query, and manipulate such data within a relational database. This post explores the essential JSON functions MySQL offers with practical examples to help get started.

Why JSON in MySQL?

Storing JSON data in relational databases can simplify the handling of semi-structured or hierarchical data. It allows:

  • Flexibility: JSON allows for dynamic and hierarchical data storage.
  • Built-in Functions: Query, update, and validate JSON data efficiently.
  • Integration: Combine relational data with JSON objects for hybrid use cases.

1. Creating JSON Data

You can construct JSON objects or arrays using the JSON_OBJECT() and JSON_ARRAY() functions.

Example:

SELECT 
    JSON_OBJECT('id', 1, 'name', 'Alice', 'roles', JSON_ARRAY('admin', 'editor')) AS json_data;
Copy after login
Copy after login

Output:

{"id": 1, "name": "Alice", "roles": ["admin", "editor"]}
Copy after login
Copy after login

2. Storing JSON Data

To store JSON data, use the JSON data type for columns.

Example:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    details JSON NOT NULL
);

INSERT INTO users (details) 
VALUES ('{"name": "Bob", "age": 30, "roles": ["viewer", "editor"]}');
Copy after login
Copy after login

3. Extracting Data from JSON

MySQL provides several functions to extract data from JSON documents:

  • JSON_EXTRACT(): Fetch values using JSON paths.
  • -> Operator: Shorthand for JSON_EXTRACT().

Example:

SELECT 
    JSON_EXTRACT(details, '$.name') AS name,
    details->'$.age' AS age
FROM users;
Copy after login
Copy after login

Output:

Working with JSON in MySQL

4. Modifying JSON Data

You can update or add elements to JSON data with:

  • JSON_SET(): Insert or update keys.
  • JSON_INSERT(): Insert if key doesn’t exist.
  • JSON_REPLACE(): Update existing keys only.

Example:

UPDATE users
SET details = JSON_SET(details, '$.city', 'New York')
WHERE id = 1;

SELECT details FROM users;
Copy after login

Output:

{"name": "Bob", "age": 30, "roles": ["viewer", "editor"], "city": "New York"}
Copy after login

5. Removing Keys or Values

Use JSON_REMOVE() to delete elements from a JSON document.

Example:

UPDATE users
SET details = JSON_REMOVE(details, '$.roles')
WHERE id = 1;

SELECT details FROM users;
Copy after login

Output:

{"name": "Bob", "age": 30, "city": "New York"}
Copy after login

6. Searching in JSON

The JSON_CONTAINS() function checks if a JSON document contains a specific value.

Example:

SELECT 
    JSON_CONTAINS(details, '"New York"', '$.city') AS has_city
FROM users;
Copy after login

Output:

Working with JSON in MySQL

7. Aggregating JSON Data

The JSON_ARRAYAGG() and JSON_OBJECTAGG() functions help aggregate query results into JSON structures.

Example:

SELECT 
    JSON_ARRAYAGG(name) AS names
FROM (
    SELECT JSON_EXTRACT(details, '$.name') AS name FROM users
) AS subquery;
Copy after login

Output:

SELECT 
    JSON_OBJECT('id', 1, 'name', 'Alice', 'roles', JSON_ARRAY('admin', 'editor')) AS json_data;
Copy after login
Copy after login

8. Validating JSON Data

The JSON_VALID() function checks whether a string is valid JSON.

Example:

{"id": 1, "name": "Alice", "roles": ["admin", "editor"]}
Copy after login
Copy after login

Output:

Working with JSON in MySQL

9. Pretty Printing JSON

Use JSON_PRETTY() for human-readable JSON formatting.

Example:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    details JSON NOT NULL
);

INSERT INTO users (details) 
VALUES ('{"name": "Bob", "age": 30, "roles": ["viewer", "editor"]}');
Copy after login
Copy after login

Output:

SELECT 
    JSON_EXTRACT(details, '$.name') AS name,
    details->'$.age' AS age
FROM users;
Copy after login
Copy after login

Additional JSON Functions

MySQL offers a wide range of JSON functions beyond those covered in detail. Below are other JSON functions:

  • JSON_ARRAY_APPEND(): Appends values to the end of a JSON array.
  • JSON_ARRAY_INSERT(): Inserts values into a JSON array at specified positions.
  • JSON_CONTAINS_PATH(): Checks if a specified path exists within a JSON document.
  • JSON_DEPTH(): Returns the maximum depth of a JSON document.
  • JSON_KEYS(): Extracts the keys from a JSON object.
  • JSON_LENGTH(): Calculates the number of elements in a JSON array or the number of keys in a JSON object.
  • JSON_MERGE_PATCH(): Combines multiple JSON documents, overwriting existing keys with the latest values.
  • JSON_MERGE_PRESERVE(): Combines multiple JSON documents, preserving all values by creating arrays for duplicates.
  • JSON_OVERLAPS(): Determines if two JSON documents have any overlapping elements.
  • JSON_QUOTE(): Escapes special characters in a string and returns it as a valid JSON string literal.
  • JSON_SEARCH(): Returns the path to a specified value within a JSON document.
  • JSON_STORAGE_FREE(): Returns the amount of space freed after modifying a JSON column.
  • JSON_STORAGE_SIZE(): Provides the storage size of a JSON document in bytes.
  • JSON_TABLE(): Converts JSON data into a relational table format for further processing.
  • JSON_TYPE(): Returns the type of a JSON value (e.g., object, array, string, etc.).
  • JSON_UNQUOTE(): Removes quotes from a JSON string.

MySQL’s JSON functions provide powerful tools for managing semi-structured data in relational databases. They make it easy to store, query, and manipulate JSON directly within SQL. Understanding these functions can help simplify workflows and open up new approaches to database design.

The above is the detailed content of Working with JSON in MySQL. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template