DEV Community

Abhay Singh Kathayat
Abhay Singh Kathayat

Posted on

Mastering JSON Handling in JavaScript: Parsing and Stringifying

JSON Handling in JavaScript (Parsing and Stringifying)

JSON (JavaScript Object Notation) is a lightweight data-interchange format that is easy for humans to read and write and easy for machines to parse and generate. JavaScript provides built-in methods for parsing JSON strings into objects and converting objects into JSON strings.


1. Parsing JSON Strings

The JSON.parse() method is used to convert a JSON string into a JavaScript object.

Syntax

JSON.parse(text[, reviver]);
Enter fullscreen mode Exit fullscreen mode
  • text: The JSON string to be parsed.
  • reviver (optional): A function to transform the parsed object before returning it.

Examples

A. Simple Parsing

const jsonString = '{"name": "John", "age": 30}';
const parsedData = JSON.parse(jsonString);
console.log(parsedData.name); // Output: John
console.log(parsedData.age);  // Output: 30
Enter fullscreen mode Exit fullscreen mode

B. Using a Reviver Function
The reviver function can be used to customize the parsing process.

const jsonString = '{"name": "John", "birthYear": 1990}';
const parsedData = JSON.parse(jsonString, (key, value) => {
  if (key === "birthYear") {
    return 2024 - value; // Convert birth year to age
  }
  return value;
});
console.log(parsedData.birthYear); // Output: 34
Enter fullscreen mode Exit fullscreen mode

Error Handling

Always wrap JSON.parse() in a try...catch block to handle invalid JSON.

const invalidJson = "{name: 'John', age: 30}"; // Invalid JSON (keys must be in quotes)
try {
  const data = JSON.parse(invalidJson);
} catch (error) {
  console.error("Invalid JSON:", error.message);
}
Enter fullscreen mode Exit fullscreen mode

2. Stringifying JavaScript Objects

The JSON.stringify() method converts a JavaScript object into a JSON string.

Syntax

JSON.stringify(value[, replacer[, space]]);
Enter fullscreen mode Exit fullscreen mode
  • value: The object to be stringified.
  • replacer (optional): A function or array to filter properties.
  • space (optional): Adds indentation for better readability.

Examples

A. Simple Stringifying

const data = { name: "John", age: 30 };
const jsonString = JSON.stringify(data);
console.log(jsonString); // Output: {"name":"John","age":30}
Enter fullscreen mode Exit fullscreen mode

B. Using a Replacer Function
The replacer function filters or transforms the object’s properties.

const data = { name: "John", age: 30, password: "secret" };
const jsonString = JSON.stringify(data, (key, value) => {
  if (key === "password") return undefined; // Exclude passwords
  return value;
});
console.log(jsonString); // Output: {"name":"John","age":30}
Enter fullscreen mode Exit fullscreen mode

C. Adding Indentation
The space parameter formats the output with indentation.

const data = { name: "John", age: 30 };
const jsonString = JSON.stringify(data, null, 2);
console.log(jsonString);
// Output:
// {
//   "name": "John",
//   "age": 30
// }
Enter fullscreen mode Exit fullscreen mode

Error Handling

Circular references in objects cause JSON.stringify() to throw an error.

const circularObject = {};
circularObject.self = circularObject;
try {
  JSON.stringify(circularObject);
} catch (error) {
  console.error("Cannot stringify circular object:", error.message);
}
Enter fullscreen mode Exit fullscreen mode

3. Practical Use Cases

A. Sending Data to a Server

Convert a JavaScript object into a JSON string before sending it in an HTTP request.

const data = { name: "John", age: 30 };
fetch("https://example.com/api", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify(data)
});
Enter fullscreen mode Exit fullscreen mode

B. Storing Data in Local Storage

Save and retrieve data in JSON format using localStorage.

const data = { name: "John", age: 30 };
localStorage.setItem("user", JSON.stringify(data)); // Storing data

const userData = JSON.parse(localStorage.getItem("user")); // Retrieving data
console.log(userData.name); // Output: John
Enter fullscreen mode Exit fullscreen mode

C. Deep Copying Objects

Using JSON methods to create a deep copy of an object (does not work for functions or circular references).

const original = { name: "John", details: { age: 30 } };
const deepCopy = JSON.parse(JSON.stringify(original));
deepCopy.details.age = 31;
console.log(original.details.age); // Output: 30
Enter fullscreen mode Exit fullscreen mode

4. Differences Between JSON and JavaScript Objects

JSON JavaScript Object
Text format (string) In-memory data structure
Keys must be strings (quoted) Keys can be strings or symbols
Cannot store methods/functions Can store methods/functions

5. Summary

  • Use JSON.parse() to convert JSON strings into JavaScript objects.
  • Use JSON.stringify() to convert JavaScript objects into JSON strings.
  • JSON is essential for data exchange in web applications, especially with APIs and local storage.
  • Always handle errors when parsing or stringifying JSON.

Mastering JSON handling is a vital skill for building modern, data-driven web applications.

Hi, I'm Abhay Singh Kathayat!
I am a full-stack developer with expertise in both front-end and back-end technologies. I work with a variety of programming languages and frameworks to build efficient, scalable, and user-friendly applications.
Feel free to reach out to me at my business email: kaashshorts28@gmail.com.

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

SurveyJS custom survey software

JavaScript Form Builder UI Component

Generate dynamic JSON-driven forms directly in your JavaScript app (Angular, React, Vue.js, jQuery) with a fully customizable drag-and-drop form builder. Easily integrate with any backend system and retain full ownership over your data, with no user or form submission limits.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay