# PHP JSON Parsing Made Easy: Validate and Process Nested JSON Data

By Dinesh Uprety
Published: 2024-08-13
Updated: 2024-08-15
Canonical: https://laranepal.com/blog/php-json-parsing-made-easy-validate-and-process-nested-json-data

## Introduction
JSON (JavaScript Object Notation) is a popular data format used for exchanging data between a server and a client. In PHP, parsing JSON data is straightforward, but handling nested JSON structures and validating the data can be more complex. This article will guide you through the process of parsing, validating, and processing nested JSON data in PHP.
## Parsing JSON Data in PHP
To parse JSON data in PHP, you can use the [`json_decode`](https://www.php.net/manual/en/function.json-decode.php) function. This function converts a JSON string into a PHP variable. Here's an example of how to read and decode a JSON file: `books.json`
```json
[
    {
        "title": "Fairy Tales",
        "pages": 100,
        "price": 3.99,
        "available": true,
        "language": null,
        "categories": ["children", "fiction"],
        "author": {
            "firstname": "Hans Christian",
            "surname": "Andersen"
        }
    },
    {
        "title": "Gardening",
        "pages": 250,
        "price": 14.50,
        "available": false,
        "language": "en",
        "categories": ["education", "non-fiction"],
        "author": {
            "firstname": "Teresa",
            "surname": "Green"
        }
    },
    {
        "title": "Space",
        "pages": 55,
        "price": 3.00,
        "available": true,
        "language": "en",
        "categories": ["non-fiction"],
        "author": {
            "firstname": "Teresa",
            "surname": "Green"
        }
    }
]
```
```php
<?php

$contents = file_get_contents('books.json');

try {
	$data = json_decode($contents, flags: JSON_THROW_ON_ERROR | JSON_OBJECT_AS_ARRAY);
} catch (JsonException $e) {
	exit($e->getMessage());
}

var_dump($data[0]['title']);
var_dump($data[1]['pages']);
var_dump($data[0]['author']['firstname']);

echo '<pre>';
print_r($data);
echo '</pre>';

?>
```
In this example, we read the contents of a JSON file named `books.json` and decode it into a PHP array. The `JSON_THROW_ON_ERROR` flag ensures that any errors during decoding will throw a `JsonException`, which we catch and handle gracefully.
## Validating JSON Data
Validation is crucial to ensure the integrity and correctness of the data. PHP provides several ways to validate JSON data. One common approach is to check for errors after decoding:
```php
if (json_last_error() !== JSON_ERROR_NONE) {
	echo json_last_error_msg();
}
```
However, using the `JSON_THROW_ON_ERROR` flag, as shown in the previous example, is a more modern and robust way to handle errors.

## Processing Nested JSON Data
Nested JSON data can be more challenging to process. Here's an example of how to access and display nested data from the `decoded` JSON array:
```html
<h1>Books</h1>

<?php foreach ($data as $book): ?>

    <h2><?= $book['title'] ?></h2>

    <p>by <?= $book['author']['firstname'] ?>
        <?= $book['author']['surname'] ?></p>

    <p><?= implode(', ', $book['categories']) ?></p>

    <table>
        <thead>
            <tr>
                <th>Pages</th>
                <th>Price</th>
                <th>Available</th>
                <th>Language</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td><?= $book['pages'] ?></td>
                <td>£<?= number_format($book['price'], 2) ?></td>
                <td><?= $book['available'] ? 'yes' : 'no' ?></td>
                <td><?= $book['language'] ?? 'unknown' ?></td>
            </tr>
        </tbody>
    </table>

    <hr>

<?php endforeach; ?>
```
In this example, we loop through the array of books and display their details, including nested data such as the `author's first name` and `surname`, and `categories`.

## Conclusion
Parsing and validating JSON data in PHP is essential for building robust applications that handle data exchange efficiently. By following the techniques outlined in this article, you can confidently `parse`, `validate`, and `process nested JSON data` in your PHP projects.
