# [2759. Convert JSON String to Object](https://leetcode.com/problems/convert-json-string-to-object) [中文文档](/solution/2700-2799/2759.Convert%20JSON%20String%20to%20Object/README.md) ## Description <p>Given a string <code>str</code>, return parsed JSON <code>parsedStr</code>. You may assume the <code>str</code> is a valid JSON string hence it only includes strings, numbers, arrays, objects, booleans, and null. <code>str</code> will not include invisible characters and escape characters. String values within the JSON will only contain alphanumeric characters.</p> <p>Please solve it without using the built-in <code>JSON.parse</code> method.</p> <p> </p> <p><strong class="example">Example 1:</strong></p> <pre> <strong>Input:</strong> str = '{"a":2,"b":[1,2,3]}' <strong>Output:</strong> {"a":2,"b":[1,2,3]} <strong>Explanation:</strong> Returns the object represented by the JSON string.</pre> <p><strong class="example">Example 2:</strong></p> <pre> <strong>Input:</strong> str = 'true' <strong>Output:</strong> true <strong>Explanation:</strong> Primitive types are valid JSON.</pre> <p><strong class="example">Example 3:</strong></p> <pre> <strong>Input:</strong> str = '[1,5,"false",{"a":2}]' <strong>Output:</strong> [1,5,"false",{"a":2}] <strong>Explanation:</strong> Returns the array represented by the JSON string.</pre> <p> </p> <p><strong>Constraints:</strong></p> <ul> <li><code>str</code> is a valid JSON string</li> <li><code>1 <= str.length <= 10<sup>5</sup></code></li> </ul> ## Solutions <!-- tabs:start --> ### **TypeScript** ```ts 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(); } ``` <!-- tabs:end -->