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 Node.js

How to convert YAML to JSON in Node.js

Converting YAML to JSON is a common task in Node.js development, particularly when working with configuration files, data exchange, or API integration. 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 guide, we'll explore how to convert YAML to JSON in Node.js efficiently and effectively.

Quick Example

const yaml = require('js-yaml');

const yamlString = `
  name: John Doe
  age: 30
  occupation: Developer
`;

const jsonString = JSON.stringify(yaml.safeLoad(yamlString), null, 2);
console.log(jsonString);

This code uses the js-yaml library to parse the YAML string and convert it to a JavaScript object, which is then stringified to JSON using JSON.stringify().

Step-by-Step Breakdown

Importing the js-yaml library

const yaml = require('js-yaml');

We import the js-yaml library, which provides functions for parsing and stringifying YAML data.

Defining the YAML string

const yamlString = `
  name: John Doe
  age: 30
  occupation: Developer
`;

This defines a sample YAML string, which we'll use as input for the conversion process.

Parsing the YAML string

const yamlObject = yaml.safeLoad(yamlString);

The safeLoad() function parses the YAML string and returns a JavaScript object. The safe prefix ensures that the parsing process is secure and prevents code injection attacks.

Stringifying the JavaScript object to JSON

const jsonString = JSON.stringify(yamlObject, null, 2);

We use JSON.stringify() to convert the JavaScript object to a JSON string. The null and 2 arguments specify that we don't want to replace any values and want to indent the output with 2 spaces, respectively.

Logging the JSON string

console.log(jsonString);

Finally, we log the resulting JSON string to the console.

Handling Edge Cases

Empty/null input

const yamlString = '';
try {
  const yamlObject = yaml.safeLoad(yamlString);
  console.log(JSON.stringify(yamlObject));
} catch (error) {
  console.error('Error parsing YAML:', error);
}

In this example, we pass an empty string to safeLoad(), which raises an error. We catch the error and log a meaningful message to the console.

Invalid input

const yamlString = ' invalid YAML ';
try {
  const yamlObject = yaml.safeLoad(yamlString);
  console.log(JSON.stringify(yamlObject));
} catch (error) {
  console.error('Error parsing YAML:', error);
}

Similarly, we pass an invalid YAML string to safeLoad(), which raises an error.

Large input

const largeYamlString = Array(1000).fill('key: value').join('\n');
const yamlObject = yaml.safeLoad(largeYamlString);
console.log(JSON.stringify(yamlObject));

In this example, we create a large YAML string with 1000 key-value pairs. We then parse the string using safeLoad() and log the resulting JavaScript object.

Unicode/special characters

const yamlString = `
  name: John Doe
  occupation: Développeur
`;
const yamlObject = yaml.safeLoad(yamlString);
console.log(JSON.stringify(yamlObject));

We define a YAML string with special characters (e.g., accents). We parse the string using safeLoad() and log the resulting JavaScript object.

Common Mistakes

Mistake 1: Using load() instead of safeLoad()

// WRONG
const yamlObject = yaml.load(yamlString);

// CORRECT
const yamlObject = yaml.safeLoad(yamlString);

Using load() instead of safeLoad() can lead to code injection attacks.

Mistake 2: Not handling errors

// WRONG
const yamlObject = yaml.safeLoad(yamlString);
console.log(JSON.stringify(yamlObject));

// CORRECT
try {
  const yamlObject = yaml.safeLoad(yamlString);
  console.log(JSON.stringify(yamlObject));
} catch (error) {
  console.error('Error parsing YAML:', error);
}

Not handling errors can lead to unexpected behavior or crashes.

Mistake 3: Not installing the js-yaml library

// WRONG
const yaml = require('yaml');

// CORRECT
const yaml = require('js-yaml');

Not installing the js-yaml library can lead to errors or unexpected behavior.

Performance Tips

Tip 1: Use safeLoad() instead of load()

Using safeLoad() instead of load() can improve performance by preventing unnecessary parsing overhead.

Tip 2: Use JSON.stringify() with a replacer function

const jsonString = JSON.stringify(yamlObject, (key, value) => {
  if (typeof value === 'undefined') return undefined;
  return value;
});

Using a replacer function with JSON.stringify() can improve performance by avoiding unnecessary serialization of undefined values.

Tip 3: Use a caching mechanism

const cache = {};
const getYamlObject = (yamlString) => {
  if (cache[yamlString]) return cache[yamlString];
  const yamlObject = yaml.safeLoad(yamlString);
  cache[yamlString] = yamlObject;
  return yamlObject;
};

Using a caching mechanism can improve performance by avoiding repeated parsing of the same YAML string.

FAQ

Q: What is the difference between load() and safeLoad()?

A: load() is a deprecated function that can lead to code injection attacks, while safeLoad() is a secure function that prevents code injection attacks.

Q: How can I handle large YAML files?

A: You can handle large YAML files by using a streaming parser or by splitting the file into smaller chunks.

Q: Can I use js-yaml with other Node.js libraries?

A: Yes, js-yaml is a standalone library that can be used with other Node.js libraries.

Q: How can I customize the JSON output?

A: You can customize the JSON output by using a replacer function with JSON.stringify().

Q: What are the system requirements for js-yaml?

A: js-yaml is a pure JavaScript library that can run on any Node.js environment.

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