SyntaxError: JSON.parse: bad parsing

๋ฉ”์‹œ์ง€

SyntaxError: JSON.parse: unterminated string literal
SyntaxError: JSON.parse: bad control character in string literal
SyntaxError: JSON.parse: bad character in string literal
SyntaxError: JSON.parse: bad Unicode escape
SyntaxError: JSON.parse: bad escape character
SyntaxError: JSON.parse: unterminated string
SyntaxError: JSON.parse: no number after minus sign
SyntaxError: JSON.parse: unexpected non-digit
SyntaxError: JSON.parse: missing digits after decimal point
SyntaxError: JSON.parse: unterminated fractional number
SyntaxError: JSON.parse: missing digits after exponent indicator
SyntaxError: JSON.parse: missing digits after exponent sign
SyntaxError: JSON.parse: exponent part is missing a number
SyntaxError: JSON.parse: unexpected end of data
SyntaxError: JSON.parse: unexpected keyword
SyntaxError: JSON.parse: unexpected character
SyntaxError: JSON.parse: end of data while reading object contents
SyntaxError: JSON.parse: expected property name or '}'
SyntaxError: JSON.parse: end of data when ',' or ']' was expected
SyntaxError: JSON.parse: expected ',' or ']' after array element
SyntaxError: JSON.parse: end of data when property name was expected
SyntaxError: JSON.parse: expected double-quoted property name
SyntaxError: JSON.parse: end of data after property name when ':' was expected
SyntaxError: JSON.parse: expected ':' after property name in object
SyntaxError: JSON.parse: end of data after property value in object
SyntaxError: JSON.parse: expected ',' or '}' after property value in object
SyntaxError: JSON.parse: expected ',' or '}' after property-value pair in object literal
SyntaxError: JSON.parse: property names must be double-quoted strings
SyntaxError: JSON.parse: expected property name or '}'
SyntaxError: JSON.parse: unexpected character
SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data

์—๋Ÿฌ ํƒ€์ž…

SyntaxError

๋ญ๊ฐ€ ์ž˜๋ชป๋ฌ๋‚˜์š”?

JSON.parse() ๋Š” ๋ฌธ์ž์—ด์„ JSON์œผ๋กœ ํŒŒ์‹ฑํ•œ๋‹ค. ์ด ๋ฌธ์ž์—ด์€ ์œ ํšจํ•œ JSON ํ˜•ํƒœ์˜ ๋ฌธ์ž์—ด์ด์–ด์•ผ ํ•˜๋ฉฐ, ์œ ํšจํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์˜ˆ์ œ

JSON.parse() ๋Š” ์—ฌ๋ถ„์˜ ์ฝค๋งˆ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋‹ค์Œ ๋‘ ์ค„์€ SyntaxError๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค:

JSON.parse('[1, 2, 3, 4,]');
JSON.parse('{"foo": 1,}');
// SyntaxError JSON.parse: unexpected character
// at line 1 column 14 of the JSON data

๋์— ์˜ค๋Š” ์ฝค๋งˆ๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ์ •ํ™•ํ•˜๊ฒŒ JSON์œผ๋กœ ํŒŒ์‹ฑํ•œ๋‹ค:

JSON.parse('[1, 2, 3, 4]');
JSON.parse('{"foo": 1}');

ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„์€ ๋ฐ˜๋“œ์‹œ ์Œ๋”ฐ์˜ดํ‘œ๋กœ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

'foo'์ฒ˜๋Ÿผ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ž‘์€ ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์„œ๋Š” ์•ˆ๋œ๋‹ค.

JSON.parse("{'foo': 1}");
// SyntaxError: JSON.parse: expected property name or '}'
// at line 1 column 2 of the JSON data

๋Œ€์‹ ์— "foo" ์ฒ˜๋Ÿผ ์จ์•ผ ํ•œ๋‹ค:

JSON.parse('{"foo": 1}');

๋ฆฌ๋”ฉ ์ œ๋กœ์™€ ์‹ญ์ง„ ์†Œ์ˆ˜์ 

01 ์ฒ˜๋Ÿผ ๋ฆฌ๋”ฉ์ œ๋กœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ , ์‹ญ์ง„ ์†Œ์ˆ˜์  ๋’ค์—๋Š” ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ์ˆซ์ž๋Š” ๋“ฑ์žฅํ•ด์•ผ ํ•œ๋‹ค.

JSON.parse('{"foo": 01}');
// SyntaxError: JSON.parse: expected ',' or '}' after property value
// in object at line 1 column 2 of the JSON data

JSON.parse('{"foo": 1.}');
// SyntaxError: JSON.parse: unterminated fractional number
// at line 1 column 2 of the JSON data

๋Œ€์‹ ์— ๋ฆฌ๋”ฉ์ œ๋กœ๋ฅผ ์—†์• ๊ณ  1 ์ด๋ผ๊ณ  ์“ฐ๊ณ , ์‹ญ์ง„ ์†Œ์ˆ˜์  ๋’ค์—๋Š” ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ˆซ์ž๋ฅผ ์ ๋„๋ก ํ•œ๋‹ค:

JSON.parse('{"foo": 1}');
JSON.parse('{"foo": 1.0}');

๋˜๋‹ค๋ฅธ ๋‚ด์šฉ