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

How to Convert YAML to JSON in PHP

How to Convert YAML to JSON in PHP

Converting YAML to JSON is a common task in PHP development, especially when working with configuration files, data exchange, or API integrations. YAML (YAML Ain't Markup Language) is a human-readable serialization format, while JSON (JavaScript Object Notation) is a lightweight data interchange format. In this article, we will explore how to convert YAML to JSON in PHP, covering the basics, edge cases, common mistakes, and performance tips.

Quick Example

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

use Symfony\Component\Yaml\Yaml;

$yamlString = "name: John Doe\nage: 30";
$jsonString = json_encode(Yaml::parse($yamlString), JSON_PRETTY_PRINT);
echo $jsonString;

This code uses the Symfony Yaml component to parse the YAML string and then encodes the resulting array to JSON using the json_encode function.

Step-by-Step Breakdown

Let's walk through the code line by line:

  1. use Symfony\Component\Yaml\Yaml; - We import the Yaml class from the Symfony Yaml component.
  2. $yamlString = "name: John Doe\nage: 30"; - We define a YAML string with two key-value pairs.
  3. $jsonString = json_encode(Yaml::parse($yamlString), JSON_PRETTY_PRINT); - We parse the YAML string using the Yaml::parse method, which returns an array. We then encode this array to JSON using json_encode, with the JSON_PRETTY_PRINT option to format the output.
  4. echo $jsonString; - We output the resulting JSON string.

Handling Edge Cases

Empty/Null Input

When dealing with empty or null input, we need to handle the case where the YAML string is empty or null:

$yamlString = null;
if ($yamlString === null) {
    $jsonString = 'null';
} else {
    $jsonString = json_encode(Yaml::parse($yamlString), JSON_PRETTY_PRINT);
}

In this example, we check if the YAML string is null, and if so, we set the JSON string to 'null'.

Invalid Input

When the YAML string is invalid, the Yaml::parse method will throw a ParseException exception:

try {
    $jsonString = json_encode(Yaml::parse($yamlString), JSON_PRETTY_PRINT);
} catch (ParseException $e) {
    $jsonString = '{"error": "Invalid YAML"}';
}

In this example, we catch the ParseException exception and set the JSON string to an error message.

Large Input

When dealing with large YAML files, we need to ensure that the parsing and encoding process does not timeout:

$yamlString = file_get_contents('large_yaml_file.yaml');
$jsonString = json_encode(Yaml::parse($yamlString), JSON_PRETTY_PRINT);

In this example, we use the file_get_contents function to read the large YAML file into a string, which can then be parsed and encoded.

Unicode/Special Characters

When dealing with YAML strings containing Unicode or special characters, we need to ensure that the encoding process preserves these characters:

$yamlString = "name: John Déjà\nage: 30";
$jsonString = json_encode(Yaml::parse($yamlString), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

In this example, we use the JSON_UNESCAPED_UNICODE option to preserve Unicode characters in the JSON output.

Common Mistakes

Mistake 1: Not Handling Null Input

Wrong code:

$jsonString = json_encode(Yaml::parse($yamlString), JSON_PRETTY_PRINT);

Corrected code:

if ($yamlString === null) {
    $jsonString = 'null';
} else {
    $jsonString = json_encode(Yaml::parse($yamlString), JSON_PRETTY_PRINT);
}

Mistake 2: Not Handling Invalid Input

Wrong code:

$jsonString = json_encode(Yaml::parse($yamlString), JSON_PRETTY_PRINT);

Corrected code:

try {
    $jsonString = json_encode(Yaml::parse($yamlString), JSON_PRETTY_PRINT);
} catch (ParseException $e) {
    $jsonString = '{"error": "Invalid YAML"}';
}

Mistake 3: Not Preserving Unicode Characters

Wrong code:

$jsonString = json_encode(Yaml::parse($yamlString), JSON_PRETTY_PRINT);

Corrected code:

$jsonString = json_encode(Yaml::parse($yamlString), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);

Performance Tips

Tip 1: Use the Symfony Yaml Component

The Symfony Yaml component is a high-performance YAML parser that is optimized for speed and memory usage.

Tip 2: Use the JSON_PRETTY_PRINT Option Judiciously

The JSON_PRETTY_PRINT option can slow down the encoding process, so use it only when necessary.

Tip 3: Use the JSON_UNESCAPED_UNICODE Option

The JSON_UNESCAPED_UNICODE option can improve performance by avoiding unnecessary Unicode escaping.

FAQ

Q: What is the difference between YAML and JSON?

A: YAML is a human-readable serialization format, while JSON is a lightweight data interchange format.

Q: How do I install the Symfony Yaml component?

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

Q: Can I use the Yaml::parse method with large YAML files?

A: Yes, the Yaml::parse method can handle large YAML files, but you may need to increase the PHP memory limit.

Q: How do I preserve Unicode characters in the JSON output?

A: You can use the JSON_UNESCAPED_UNICODE option to preserve Unicode characters in the JSON output.

Q: What happens if the YAML string is invalid?

A: If the YAML string is invalid, the Yaml::parse method will throw a ParseException exception.

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