Convert Object to JSON String

Updated on 08 May, 2025
Convert Object to JSON String header image

Problem Statement

In this task, you need to create a function that converts a given value into a valid JSON string format. The value could be any valid JSON type including string, number, array, object, boolean, or null. The resulting JSON string should be formatted without any unnecessary spaces and the properties of objects should appear in the same order as they would result from Object.keys() method in JavaScript. Unlike typical implementations that might utilize the JSON.stringify method, you are required to implement this functionality from scratch. This involves understanding how each type of value should be represented in JSON and handling the recursive structure of nested objects and arrays.

Examples

Example 1

Input:

object = {"y":1,"x":2}

Output:

{"y":1,"x":2}

Explanation:

Return the JSON representation.
Note that the order of keys should be the same as the order returned by Object.keys().

Example 2

Input:

object = {"a":"str","b":-12,"c":true,"d":null}

Output:

{"a":"str","b":-12,"c":true,"d":null}

Explanation:

The primitives of JSON are strings, numbers, booleans, and null.

Example 3

Input:

object = {"key":{"a":1,"b":[{},null,"Hello"]}}

Output:

{"key":{"a":1,"b":[{},null,"Hello"]}}

Explanation:

Objects and arrays can include other objects and arrays.

Example 4

Input:

object = true

Output:

true

Explanation:

Primitive types are valid inputs.

Constraints

  • value is a valid JSON value
  • 1 <= JSON.stringify(object).length <= 105
  • maxNestingLevel <= 1000
  • all strings contain only alphanumeric characters

Approach and Intuition

The problem of manually creating a JSON string from various data types involves considering the following steps and elements:

  1. Handling Primitive Types:

    • String: Should be enclosed in double quotes. For example, hello becomes "hello".
    • Number: Directly used as is. For instance, -12 remains as -12.
    • Boolean: Convert directly to true or false.
    • null: Represented as null.
  2. Handling Arrays:

    • Iterate over each element in the array, convert each element to its JSON string representation recursively, and combine them with commas. Wrap the result with square brackets [...].
  3. Handling Objects:

    • For objects, iterate through each key-value pair.
    • Convert each key to a string (enclose in double quotes) and get the JSON string representation of the corresponding value.
    • Combine each key-value pair with a colon : in between and separate pairs with commas.
    • Wrap the resulting string with curly braces {...}.
    • Ensure the order of keys is maintained as given originally, which typically involves using the order provided by Object.keys().
  4. Handling Nested Structures:

    • Nested arrays and objects will require recursive processing. For example, if an object contains another object or an array, you should process the inner structures to strings before combining them into the outer structure.
    • Each recursive call must handle the data type appropriately, basing on the type whether it's an object, array, or a primitive.
  5. Optimizations and Constraints:

    • The function must handle depths up to maxNestingLevel <= 1000, which implies potential use of a recursive approach with careful attention not to exceed stack limits in languages that have them.
    • The function should be efficient, ideally processing each value in linear time relative to its size to stay within the limit of 1 <= JSON.stringify(object).length <= 105.

By understanding these steps, you will be able to construct a JSON string manually for any given valid JSON type input, mirroring the behavior of the native JSON handling in programming environments that usually employ ready-made methods like JSON.stringify.

Solutions

  • JavaScript
js
var convertToJsonString = function(data) {
    return typeof data === 'string' ? `"${data}"` :
        data === null || typeof data !== 'object' ? data :
        Array.isArray(data) ? '[' + data.reduce((accum, item) => accum + convertToJsonString(item) + ',', '').slice(0, -1) + ']' :
        '{' + Object.entries(data).reduce((accum, entry) => accum + convertToJsonString(entry[0]) + ':' + convertToJsonString(entry[1]) + ',', '').slice(0, -1) + '}';
};

The provided JavaScript function, named convertToJsonString, is designed to convert a JavaScript object or any other data type into a JSON-formatted string. This implementation effectively handles various types of inputs, including arrays, nested objects, null values, and primitive data types. Here's an overview of how it functions:

  • Use a ternary operator to determine the type of the input data.
  • If the data is a string, it encapsulates the string in double quotes.
  • For values that are null or not objects (like numbers and boolean), it directly returns the data.
  • If the data is an array, process each element of the array, convert it to a JSON string, concatenate the results with commas, and enclose in square brackets. This is achieved using the Array.reduce() method.
  • For object types, iterate over each key-value pair, convert both the key and the value to a JSON string using recursive calls, and concatenate them with a colon in between. Similar to arrays, pieces are joined with commas and wrapped in curly braces.

Here are some usage details to ensure you can implement the function properly:

  • Include the function in your JavaScript code.
  • Call the function with the data you aim to convert to a JSON string.
  • It returns a string in JSON format which can be used for storage or transmission.

Consider the depth of recursion when dealing with deeply nested objects to prevent performance issues.

Comments

No comments yet.