Try it yourself with our free Json Yaml Converter tool — runs entirely in your browser, no signup needed.

How to Convert JSON to YAML in PHP

How to Convert JSON to YAML in PHP

Converting JSON to YAML is a common requirement in many PHP applications, especially when working with APIs, data import/export, or configuration files. YAML (YAML Ain't Markup Language) is a human-readable serialization format that is often preferred over JSON for its simplicity and readability. In this article, we will explore how to convert JSON to YAML in PHP, including a quick example, step-by-step breakdown, handling edge cases, common mistakes, performance tips, and frequently asked questions.

Quick Example

Here is a minimal example that converts a JSON string to YAML:

use Symfony\Component\Yaml\Yaml;

$jsonString = '{"name": "John", "age": 30, "city": "New York"}';
$yamlString = Yaml::dump(json_decode($jsonString, true));
echo $yamlString;

This code uses the Symfony Yaml component, which is a popular and well-maintained library for working with YAML in PHP.

Step-by-Step Breakdown

Let's break down the code line by line:

  1. use Symfony\Component\Yaml\Yaml;: We import the Yaml class from the Symfony Yaml component.
  2. $jsonString = '{"name": "John", "age": 30, "city": "New York"}';: We define a JSON string that we want to convert to YAML.
  3. $yamlString = Yaml::dump(json_decode($jsonString, true));: We use the json_decode function to parse the JSON string into a PHP array. We pass true as the second argument to return an associative array instead of an object. Then, we pass the array to the Yaml::dump method, which converts the array to a YAML string.
  4. echo $yamlString;: We output the resulting YAML string.

To use the Symfony Yaml component, you need to install it via Composer:

composer require symfony/yaml

Handling Edge Cases

Here are some common edge cases to consider:

Empty/Null Input

If the input JSON string is empty or null, the json_decode function will return null. To handle this case, you can add a simple null check:

$jsonString = '';
if (empty($jsonString)) {
    $yamlString = '';
} else {
    $yamlString = Yaml::dump(json_decode($jsonString, true));
}

Invalid Input

If the input JSON string is invalid, the json_decode function will return false. To handle this case, you can add a simple error check:

$jsonString = '{"name": "John", "age": 30, "city": "New York"'. // invalid JSON
if (json_decode($jsonString, true) === false) {
    $yamlString = '';
} else {
    $yamlString = Yaml::dump(json_decode($jsonString, true));
}

Large Input

If the input JSON string is very large, the json_decode function may consume a lot of memory. To handle this case, you can use a streaming JSON parser like JsonParser from the php-json extension:

$jsonString = '{"name": "John", "age": 30, "city": "New York"}';
$jsonParser = new JsonParser();
$jsonParser->parse($jsonString);
$yamlString = Yaml::dump($jsonParser->getData());

Unicode/Special Characters

If the input JSON string contains Unicode or special characters, the json_decode function may not handle them correctly. To handle this case, you can use the JSON_UNESCAPED_UNICODE flag:

$jsonString = '{"name": "J\u00f6hn", "age": 30, "city": "New York"}';
$yamlString = Yaml::dump(json_decode($jsonString, true, 512, JSON_UNESCAPED_UNICODE));

Common Mistakes

Here are three common mistakes developers make when converting JSON to YAML in PHP:

Mistake 1: Forgetting to decode JSON

Wrong code:

$yamlString = Yaml::dump($jsonString);

Corrected code:

$yamlString = Yaml::dump(json_decode($jsonString, true));

Mistake 2: Not handling invalid input

Wrong code:

$yamlString = Yaml::dump(json_decode($jsonString, true));

Corrected code:

if (json_decode($jsonString, true) === false) {
    $yamlString = '';
} else {
    $yamlString = Yaml::dump(json_decode($jsonString, true));
}

Mistake 3: Not handling large input

Wrong code:

$yamlString = Yaml::dump(json_decode($jsonString, true));

Corrected code:

$jsonParser = new JsonParser();
$jsonParser->parse($jsonString);
$yamlString = Yaml::dump($jsonParser->getData());

Performance Tips

Here are two performance tips for converting JSON to YAML in PHP:

  1. Use a streaming JSON parser: When dealing with large JSON inputs, use a streaming JSON parser like JsonParser to avoid consuming too much memory.
  2. Use the JSON_UNESCAPED_UNICODE flag: When dealing with Unicode or special characters, use the JSON_UNESCAPED_UNICODE flag to ensure correct decoding.

FAQ

Q: What is the difference between JSON and YAML?

A: JSON (JavaScript Object Notation) is a lightweight, human-readable data interchange format, while YAML (YAML Ain't Markup Language) is a human-readable serialization format.

Q: How do I install the Symfony Yaml component?

A: You can install the Symfony Yaml component via Composer: composer require symfony/yaml

Q: How do I handle invalid input?

A: You can handle invalid input by checking the return value of the json_decode function. If it returns false, you can return an error message or a default value.

Q: How do I handle large input?

A: You can handle large input by using a streaming JSON parser like JsonParser.

Q: How do I handle Unicode/special characters?

A: You can handle Unicode/special characters by using the JSON_UNESCAPED_UNICODE flag when decoding the JSON string.

AI agent tools available. The CodeTidy MCP Server gives Claude, Cursor, and other AI agents access to 60+ developer tools. One command: npx @codetidy/mcp