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.
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 string1 <= 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(); }