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 TypeScript

How to Convert JSON to YAML in TypeScript

Converting JSON to YAML is a common task in software development, especially when working with data serialization and configuration files. YAML is a human-readable 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 TypeScript, a popular superset of JavaScript.

Quick Example

Here is a minimal example of how to convert JSON to YAML in TypeScript:

import * as yaml from 'js-yaml';

const jsonData = { name: 'John Doe', age: 30 };
const yamlData = yaml.dump(jsonData);
console.log(yamlData);

This code uses the js-yaml library to convert a JSON object to a YAML string.

Step-by-Step Breakdown

Let's break down the code line by line:

  • import * as yaml from 'js-yaml';: We import the js-yaml library, which provides functions for parsing and generating YAML data.
  • const jsonData = { name: 'John Doe', age: 30 };: We define a JSON object with two properties: name and age.
  • const yamlData = yaml.dump(jsonData);: We use the dump function from js-yaml to convert the JSON object to a YAML string. The dump function takes a JavaScript object as input and returns a YAML string.
  • console.log(yamlData);: We log the resulting YAML string to the console.

Handling Edge Cases

Here are some common edge cases to consider when converting JSON to YAML:

Empty/Null Input

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

const jsonData = null;
const yamlData = jsonData ? yaml.dump(jsonData) : '';
console.log(yamlData); // Output: ''

Invalid Input

If the input JSON object is invalid (e.g., it contains a circular reference), the dump function will throw an error. To handle this case, you can use a try-catch block:

const jsonData = { foo: { bar: { baz: { foo: { bar: { baz: { foo: null } } } } } };
try {
  const yamlData = yaml.dump(jsonData);
  console.log(yamlData);
} catch (error) {
  console.error('Error converting JSON to YAML:', error);
}

Large Input

If the input JSON object is very large, the dump function may take a long time to execute or even run out of memory. To handle this case, you can use a streaming approach:

const jsonData = { /* large JSON object */ };
const yamlStream = yaml.createStream();
jsonData.forEach((value) => {
  yamlStream.write(value);
});
const yamlData = yamlStream.toString();
console.log(yamlData);

Unicode/Special Characters

If the input JSON object contains Unicode or special characters, the dump function will escape them properly. However, if you need to preserve the original characters, you can use the noRefs option:

const jsonData = { name: 'Jöhn Döe' };
const yamlData = yaml.dump(jsonData, { noRefs: true });
console.log(yamlData); // Output: "name: Jöhn Döe"

Common Mistakes

Here are some common mistakes developers make when converting JSON to YAML:

Mistake 1: Forgetting to import the js-yaml library

Wrong code:

const yamlData = yaml.dump(jsonData);

Correct code:

import * as yaml from 'js-yaml';
const yamlData = yaml.dump(jsonData);

Mistake 2: Passing invalid input to the dump function

Wrong code:

const yamlData = yaml.dump(' invalid input ');

Correct code:

try {
  const yamlData = yaml.dump(jsonData);
  console.log(yamlData);
} catch (error) {
  console.error('Error converting JSON to YAML:', error);
}

Mistake 3: Not handling large input properly

Wrong code:

const yamlData = yaml.dump({ /* large JSON object */ });

Correct code:

const yamlStream = yaml.createStream();
jsonData.forEach((value) => {
  yamlStream.write(value);
});
const yamlData = yamlStream.toString();
console.log(yamlData);

Performance Tips

Here are some performance tips for converting JSON to YAML in TypeScript:

Tip 1: Use the dump function instead of safeDump

The dump function is faster and more efficient than safeDump, but it may not handle all edge cases properly.

const yamlData = yaml.dump(jsonData); // Faster, but may not handle all edge cases
const yamlData = yaml.safeDump(jsonData); // Slower, but handles all edge cases

Tip 2: Use a streaming approach for large input

Using a streaming approach can help improve performance when dealing with large input.

const yamlStream = yaml.createStream();
jsonData.forEach((value) => {
  yamlStream.write(value);
});
const yamlData = yamlStream.toString();
console.log(yamlData);

Tip 3: Avoid using unnecessary options

Avoid using unnecessary options, such as noRefs, unless you need to preserve the original characters.

const yamlData = yaml.dump(jsonData, { noRefs: true }); // Slower, but preserves original characters
const yamlData = yaml.dump(jsonData); // Faster, but may not preserve original characters

FAQ

Q: What is the difference between dump and safeDump?

A: dump is faster and more efficient, but may not handle all edge cases properly. safeDump is slower, but handles all edge cases.

Q: How do I handle large input properly?

A: Use a streaming approach to handle large input.

Q: Can I preserve the original characters in the YAML output?

A: Yes, use the noRefs option.

Q: What is the best way to handle invalid input?

A: Use a try-catch block to handle invalid input.

Q: Can I use this approach for other data formats?

A: No, this approach is specific to JSON and YAML.

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