์ผ๋ฐ์ ์ธ JSON ๊ตฌ๋ฌธ ์ค๋ฅ ๋ฐ ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ๋ฅผ ์ฌ์ฉํ ํด๊ฒฐ ๋ฐฉ๋ฒ
์ผ๋ฐ์ ์ธ JSON ์ค๋ฅ
JSON์ ์๊ฒฉํ ๊ตฌ๋ฌธ ๊ท์น์ ๋จ ํ๋์ ์๋ชป๋ ๋ฌธ์๋ผ๋ ์ ์ฒด ๋ฌธ์๋ฅผ ๋ง๊ฐ๋จ๋ฆด ์ ์์์ ์๋ฏธํฉ๋๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ JSON ์ค๋ฅ๋ฅผ ์ดํดํ๋ฉด ๋ ๋น ๋ฅด๊ฒ ๋๋ฒ๊น ํ๊ณ ๋์ผํ ์ค์๋ฅผ ๋ฐ๋ณตํ์ง ์์ ์ ์์ต๋๋ค. ์๋๋ ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฅ ์์ฃผ ๊ฒช๋ ๋ฌธ์ ์ ๊ฐ๊ฐ์ ๋ํ ๋ช ํํ ์ค๋ช ๋ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋๋ค.
1. ํํ ์ผํ
์ค๋ฅ: ๊ฐ์ฒด๋ ๋ฐฐ์ด ๋์์ Unexpected token
ํํ ์ผํ๋ JavaScript ๊ฐ์ฒด์ ๋ฐฐ์ด์์๋ ํ์ฉ๋์ง๋ง JSON์์๋ ์๊ฒฉํ ๊ธ์ง๋ฉ๋๋ค.
์ ํจํ์ง ์์ JSON:
{
"name": "Alice",
"age": 30,
}
ํด๊ฒฐ ๋ฐฉ๋ฒ: ๋ง์ง๋ง ํญ๋ชฉ ๋ค์ ์ผํ๋ฅผ ์ ๊ฑฐํ์ธ์.
{
"name": "Alice",
"age": 30
}
ํํ ์ผํ๊ฐ ์๋ ๋ฐฐ์ด:
// ์ ํจํ์ง ์์
[1, 2, 3,]
// ์ ํจํจ
[1, 2, 3]
2. ํค ์ฃผ์์ ๋๋ฝ๋๊ฑฐ๋ ์๋ชป๋ ๋ฐ์ดํ
์ค๋ฅ: Unexpected identifier ๋๋ Expected double-quoted property name
JSON์ ๋ชจ๋ ๊ฐ์ฒด ํค๊ฐ ํฐ๋ฐ์ดํ๋ก ๋ฌถ์ฌ์ผ ํฉ๋๋ค. ์์๋ฐ์ดํ์ ๋ฐ์ดํ ์๋ ํค๋ JavaScript์์๋ ์๋ํ๋๋ผ๋ ์ ํจํ์ง ์์ต๋๋ค.
์ ํจํ์ง ์์ JSON:
{
name: "Alice",
'occupation': "Engineer"
}
ํด๊ฒฐ ๋ฐฉ๋ฒ: ํญ์ ํค๋ฅผ ํฐ๋ฐ์ดํ๋ก ๋ฌถ์ผ์ธ์.
{
"name": "Alice",
"occupation": "Engineer"
}
3. ๋ฌธ์์ด ๊ฐ์ ์์๋ฐ์ดํ ์ฌ์ฉ
์ค๋ฅ: Unexpected identifier ๋๋ Unterminated string
ํค์ ๋ง์ฐฌ๊ฐ์ง๋ก, ๋ฌธ์์ด ๊ฐ๋ JSON์์๋ ํฐ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์์๋ฐ์ดํ๋ ์ ํจํ์ง ์์ต๋๋ค.
์ ํจํ์ง ์์ JSON:
{ "greeting": 'Hello, world!' }
ํด๊ฒฐ ๋ฐฉ๋ฒ: ์์๋ฐ์ดํ๋ฅผ ํฐ๋ฐ์ดํ๋ก ๋ฐ๊พธ์ธ์.
{ "greeting": "Hello, world!" }
ํ: ๋ฌธ์์ด์ ํฐ๋ฐ์ดํ๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ๋ฐฑ์ฌ๋์๋ก ์ด์ค์ผ์ดํ ์ฒ๋ฆฌํ์ธ์: "He said, \"Hello\"".
4. ์ด์ค์ผ์ดํ ์ฒ๋ฆฌ๋์ง ์์ ํน์ ๋ฌธ์
์ค๋ฅ: Unexpected token ๋๋ Invalid character
JSON ๋ฌธ์์ด์์๋ ํน์ ๋ฌธ์๋ฅผ ์ด์ค์ผ์ดํ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค: ํฐ๋ฐ์ดํ("), ๋ฐฑ์ฌ๋์(\), ์ ์ด ๋ฌธ์.
์ ํจํ์ง ์์ JSON:
{
"path": "C:\Users\Documents\file.json",
"quote": "He said "hello""
}
ํด๊ฒฐ ๋ฐฉ๋ฒ: ๋ฐฑ์ฌ๋์์ ํฐ๋ฐ์ดํ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ด์ค์ผ์ดํ ์ฒ๋ฆฌํ์ธ์.
{
"path": "C:\\Users\\Documents\\file.json",
"quote": "He said \"hello\""
}
JSON ์ด์ค์ผ์ดํ ์ํ์ค ์ ์ฒด ๋ชฉ๋ก
| ์ํ์ค | ๋ํ๋ด๋ ๋ฌธ์ |
|----------|-----------|
| \" | ํฐ๋ฐ์ดํ |
| \\ | ๋ฐฑ์ฌ๋์ |
| \/ | ์ฌ๋์ |
| \b | ๋ฐฑ์คํ์ด์ค |
| \f | ํผ ํผ๋ |
| \n | ์ค ๋ฐ๊ฟ |
| \r | ์บ๋ฆฌ์ง ๋ฆฌํด |
| \t | ํญ |
| \uXXXX | ์ ๋์ฝ๋ ๋ฌธ์ (์: รฉ๋ e) |
5. ์ ํจํ์ง ์์ ์ซ์ ํ์
์ค๋ฅ: Unexpected number ๋๋ Invalid number
JSON์๋ ์ซ์ ํ์์ ๋ํ ํน์ ๊ท์น์ด ์์ต๋๋ค:
- ์์ 0์ ๋ถ์ผ ์ ์์ต๋๋ค (
01์ ์ ํจํ์ง ์์) - ๋จ์ผ ์์๋ฆฌ 0์ ์ซ์
0์๋ง ํ์ฉ๋ฉ๋๋ค - ์ซ์๋ ๋ค์ ์ ์ ๋ถ์ผ ์ ์์ต๋๋ค (
10.์ ์ ํจํ์ง ์์) - 16์ง์, 8์ง์, 2์ง์ ํ์์ ์ง์๋์ง ์์ต๋๋ค
์ ํจํ์ง ์์ JSON:
{
"invalid1": 01,
"invalid2": 10.,
"invalid3": 0xFF,
"invalid4": 1,000
}
ํด๊ฒฐ ๋ฐฉ๋ฒ:
{
"valid1": 1,
"valid2": 10.0,
"valid3": 255,
"valid4": 1000
}
6. ์ ํจํ์ง ์์ ๊ฐ: undefined, NaN, Infinity
์ค๋ฅ: undefined, NaN, Infinity์ ๋ํ Unexpected token
JavaScript์๋ JSON์ ํด๋นํ๋ ํํ์ด ์๋ ๊ฐ๋ค์ด ์์ต๋๋ค. ์ด๋ค์ ํ์ฑ ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค:
์ ํจํ์ง ์์ JSON:
{
"undefinedVal": undefined,
"notANumber": NaN,
"infinity": Infinity
}
ํด๊ฒฐ ๋ฐฉ๋ฒ: ์ ํจํ JSON ๊ฐ์ผ๋ก ๋ฐ๊พธ๊ฑฐ๋ ๊ท์น์ ์ฌ์ฉํ์ธ์.
{
"undefinedVal": null,
"notANumber": null,
"infinity": 1.7976931348623157e+308
}
7. ์ถ๊ฐ ์ผํ ๋๋ ๋๋ฝ๋ ์ผํ
์ค๋ฅ: Expected comma ๋๋ Unexpected token
JSON์ ์ผํ๋ ๋ชจ๋ ํค/๊ฐ ์๊ณผ ๋ฐฐ์ด ์์๋ฅผ ๊ตฌ๋ถํด์ผ ํ์ง๋ง, ๋ง์ง๋ง ํญ๋ชฉ ๋ค์ ๋ํ๋์๋ ์ ๋ฉ๋๋ค.
๋๋ฝ๋ ์ผํ (์ ํจํ์ง ์์):
{
"name": "Alice"
"age": 30
}
ํด๊ฒฐ ๋ฐฉ๋ฒ: ๋๋ฝ๋ ์ผํ๋ฅผ ์ถ๊ฐํ์ธ์.
{
"name": "Alice",
"age": 30
}
8. ๊น๊ฒ ์ค์ฒฉ๋ ๊ตฌ์กฐ ๋ฌธ์
์ค๋ฅ: Maximum call stack size exceeded ๋๋ ํ์ ํ์์์
๊ตฌ๋ฌธ ์ค๋ฅ๋ ์๋์ง๋ง, ๊น๊ฒ ์ค์ฒฉ๋ JSON(10๋จ๊ณ ์ด์)์ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๊ณ ๋๋ฒ๊น ์ ๋งค์ฐ ์ด๋ ต๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
๋ฌธ์ ๊ฐ ์๋ ๊ตฌ์กฐ:
{
"level1": {
"level2": {
"level3": {
"level4": {
"level5": {
"level6": {
"value": "too deep"
}
}
}
}
}
}
}
๋ ๋์ ์ ๊ทผ ๋ฐฉ์: ๊ตฌ์กฐ๋ฅผ ํํํํ๊ฑฐ๋ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ์ธ์.
{
"users": {
"alice": { "role": "admin" }
},
"permissions": {
"admin": ["read", "write", "delete"]
}
}
9. ๋๋ฝ๋ ์ฌ๋ ์ค๊ดํธ ๋๋ ๋ซ๋ ์ค๊ดํธ
์ค๋ฅ: Expected ',' or '}' ๋๋ Unexpected end of JSON input
์ผ์นํ์ง ์๋ ์ค๊ดํธ์ ๋๊ดํธ๋ ํนํ ๋๊ท๋ชจ ๋๋ ์๋์ผ๋ก ์์ฑ๋ JSON ํ์ผ์์ JSON ์ค๋ฅ์ ์ผ๋ฐ์ ์ธ ์์ธ์ ๋๋ค.
์ ํจํ์ง ์์ JSON:
{
"name": "Alice",
"items": [1, 2, 3
}
ํด๊ฒฐ ๋ฐฉ๋ฒ: ๋ชจ๋ {์ ์ผ์นํ๋ }๊ฐ, ๋ชจ๋ [์ ์ผ์นํ๋ ]๊ฐ ์๋์ง ํ์ธํ์ธ์.
{
"name": "Alice",
"items": [1, 2, 3]
}
ํ๋ก ํ: JSON์ ์ ์ ํ ๋ค์ฌ์ฐ๊ธฐํ์ฌ ์ฌ๋ ๊ดํธ์ ๋ซ๋ ๊ดํธ๋ฅผ ์๊ฐ์ ์ผ๋ก ์ผ์น์ํค์ธ์. JSON ํฌ๋งทํฐ๊ฐ ์ด๋ฅผ ์๋์ผ๋ก ์ํํ ์ ์์ต๋๋ค.
JSON ์ค๋ฅ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋๋ฒ๊น ํ๋ ๋ฐฉ๋ฒ
- JSON ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ ์ฌ์ฉ -- ๋ฌด๋ฃ JSON ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ์ JSON์ ๋ถ์ฌ๋ฃ์ด ์ฒซ ๋ฒ์งธ ์ค๋ฅ์ ์ ํํ ์ค๊ณผ ์ด์ ํ์ธํ์ธ์.
- ์ ์ง์ ์ผ๋ก ์ ํจ์ฑ ๊ฒ์ฌ -- ๋์ฉ๋ ํ์ผ์ ๊ฒฝ์ฐ ํ ์น์ ์ฉ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํํ์ฌ ์ค๋ฅ๋ฅผ ๊ฒฉ๋ฆฌํ์ธ์.
- ๋ณต์ฌ-๋ถ์ฌ๋ฃ๊ธฐ ์ํฐํฉํธ ์ฃผ์ -- ๋ณด์ด์ง ์๋ ๋ฌธ์, ์ค๋งํธ ๋ฐ์ดํ, ์ค ๋ฐ๊ฟ ์๋ ๊ณต๋ฐฑ์ด ์๋ ํ๋ก์ธ์๋ ์น ํ์ด์ง์์ ๋ชฐ๋ ๋ค์ด์ค๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
- ๋ฌธ์ ์ธ์ฝ๋ฉ ํ์ธ -- ํ์ผ์ด UTF-8๋ก ์ ์ฅ๋์๋์ง ํ์ธํ์ธ์. ๋ค๋ฅธ ์ธ์ฝ๋ฉ์ ๋ณด์ด์ง ์๋ ์ค๋ฅ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- ๋ฆฐํฐ ์ฌ์ฉ --
jsonํ๋ฌ๊ทธ์ธ์ด ํฌํจ๋ ESLint์ ๊ฐ์ ๋๊ตฌ๋ ๊ฐ๋ฐ ์ค์ JSON ์ค๋ฅ๋ฅผ ์ก์๋ ๋๋ค.
๊ธฐ์ตํ์ธ์: JSON ํ์๋ ์ผ๋ฐ์ ์ผ๋ก ์ฒซ ๋ฒ์งธ ๊ตฌ๋ฌธ ์ค๋ฅ๋ง ๋ณด๊ณ ํฉ๋๋ค. ํด๋น ์ค๋ฅ๋ฅผ ์์ ํ๊ณ , ๋ค์ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํํ๊ณ , ๋ฌธ์๊ฐ ํต๊ณผํ ๋๊น์ง ๋ฐ๋ณตํ์ธ์. ์ ํฌ JSON ํฌ๋งทํฐ & ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ ๋๊ตฌ๋ ์ด ๊ณผ์ ์ ๊ฐ์ํํ๊ธฐ ์ํด ์ฆ๊ฐ์ ์ด๊ณ ์์ธํ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ ๊ณตํฉ๋๋ค.