Welcome to Subscribe On Youtube

2759. Convert JSON String to Object

Description

Given a string str, return parsed JSON parsedStr. You may assume the str is a valid JSON string hence it only includes strings, numbers, arrays, objects, booleans, and null. str will not include invisible characters and escape characters. String values within the JSON will only contain alphanumeric characters.

Please solve it without using the built-in JSON.parse method.

 

Example 1:

Input: str = '{"a":2,"b":[1,2,3]}'
Output: {"a":2,"b":[1,2,3]}
Explanation: Returns the object represented by the JSON string.

Example 2:

Input: str = 'true'
Output: true
Explanation: Primitive types are valid JSON.

Example 3:

Input: str = '[1,5,"false",{"a":2}]'
Output: [1,5,"false",{"a":2}]
Explanation: Returns the array represented by the JSON string.

 

Constraints:

  • str is a valid JSON string
  • 1 <= str.length <= 105

Solutions

  • function jsonParse(str: string): any {
        const n = str.length;
        let i = 0;
    
        const parseTrue = (): boolean => {
            i += 4;
            return true;
        };
    
        const parseFalse = (): boolean => {
            i += 5;
            return false;
        };
    
        const parseNull = (): null => {
            i += 4;
            return null;
        };
    
        const parseNumber = (): number => {
            let s = '';
            while (i < n) {
                const c = str[i];
                if (c === ',' || c === '}' || c === ']') {
                    break;
                }
                s += c;
                i++;
            }
            return Number(s);
        };
    
        const parseArray = (): any[] => {
            const arr: any[] = [];
            i++;
            while (i < n) {
                const c = str[i];
                if (c === ']') {
                    i++;
                    break;
                }
                if (c === ',') {
                    i++;
                    continue;
                }
                const value = parseValue();
                arr.push(value);
            }
            return arr;
        };
    
        const parseString = (): string => {
            let s = '';
            i++;
            while (i < n) {
                const c = str[i];
                if (c === '"') {
                    i++;
                    break;
                }
                if (c === '\\') {
                    i++;
                    s += str[i];
                } else {
                    s += c;
                }
                i++;
            }
            return s;
        };
    
        const parseObject = (): any => {
            const obj: any = {};
            i++;
            while (i < n) {
                const c = str[i];
                if (c === '}') {
                    i++;
                    break;
                }
                if (c === ',') {
                    i++;
                    continue;
                }
                const key = parseString();
                i++;
                const value = parseValue();
                obj[key] = value;
            }
            return obj;
        };
        const parseValue = (): any => {
            const c = str[i];
            if (c === '{') {
                return parseObject();
            }
            if (c === '[') {
                return parseArray();
            }
            if (c === '"') {
                return parseString();
            }
            if (c === 't') {
                return parseTrue();
            }
            if (c === 'f') {
                return parseFalse();
            }
            if (c === 'n') {
                return parseNull();
            }
            return parseNumber();
        };
        return parseValue();
    }
    
    

All Problems

All Solutions