Tech Help
JSON.parse яагаад "Unexpected token" гэж хэлдэг вэ?
JSON.parse текст зөв JSON биш үед Unexpected token шиддэг. Ганц хашилт, төгсгөлийн таслал, HTML хариу, алдааны байрлалыг засаарай.
JSON.parse() оролт зөв JSON биш бол SyntaxError шиддэг. “Unexpected token” ерөнхийдөө задлагч бүтцийн тэр цэгт зөвшөөрөгдөөгүй тэмдэгтэд хүрсэн гэсэн үг.
Нийтлэг шалтгаан: ганц хашилт, төгсгөлийн таслал, хашилтгүй шинж нэр, буруу мөрийн escape, JSON-ийн эргэн тойрон дахь илүү текст, эсвэл HTML буюу JSON биш биеийг JSON гэж задлах.
Алдааны яг үг хэллэг JavaScript хөдөлгүүр, хөтчөөс хамаарч өөрчлөгдөнө. Хүн бүрийн runtime «Unexpected token X in JSON at position N» хэвлэнэ гэж бүү үз.
Энэ бол JSON.parse дээрх Unexpected token засвар: алдаа юу гэсэн үг, байрлалыг хэрхэн унших, бие HTML байвал яах. Төгсгөлийн таслал, хашилт, Unexpected end-ийг өргөнөөр Түгээмэл JSON алдаа: төгсгөлийн таслал, хашилт болон Unexpected token хамарна.
JSON.parse()-д “Unexpected token” юу гэсэн үг вэ?
JSON.parse() JSON дүрмийг шаардана. Одоогийн байрлал дахь хууль бус тэмдэгт SyntaxError шиднэ. {“name”:“Alex”,} буруу: тэр таслалын дараа объект дуусаж чадахгүй. Мессежийн текст, байрлал ажиллах орчноос хамаарч өөр хэвээр.
JSON.parse() ямар алдаа шиддэг вэ?
Буруу JSON ерөнхийдөө SyntaxError шиднэ. Төрлийг батлахын тулд error.name-г бич. Бүх error.message-г хатуу битгий кодло: хөдөлгүүр, хувилбар өөрөөр үгчилдэг.
try {
JSON.parse('{"name":"Alex",}');
} catch (error) {
console.log(error.name);
// SyntaxError
}
1. Давхарын оронд ганц хашилт
{‘name’:‘Alex’} буруу JSON. {“name”:“Alex”} зөв. JSON мөр, объектын гишүүний нэр давхар хашилт ашиглана. const user = { name: ‘Alex’ } зэрэг JavaScript объектын литерал хууль ёсны JavaScript байж болох ч JSON текст биш байж болно.
Буруу
{'name':'Alex'}
Зөв
{"name":"Alex"}
2. Төгсгөлийн таслал
Сүүлийн шинж эсвэл массивын элементийн дараах таслал зөв стандарт JSON биш. {“name”:“Alex”,“age”:30,} болон [1, 2, 3,] хоёулаа унана. Үүнийг Unexpected token-ийн нэг шалтгаан гэж үз; Түгээмэл JSON алдаа: төгсгөлийн таслал, хашилт болон Unexpected token төгсгөлийн таслалыг гүнзгий хамарна.
Буруу
{
"name": "Alex",
"age": 30,
}
Зөв
{
"name": "Alex",
"age": 30
}
[1, 2, 3,]
3. Хашилтгүй шинж нэр
{ name: “Alex” } JavaScript объектын литерал байж болно. JSON-д гишүүний нэр мөр бөгөөд давхар хашилт хэрэгтэй: {“name”:“Alex”}.
Буруу
{
name: "Alex"
}
Зөв
{
"name": "Alex"
}
4. Буруу мөрийн escape
JSON текстэд урвуу налуу escape эхэлнэ. C:\Users\Alex шиг түүхий зам буруу, учир нь \U хууль ёсны escape биш. Урвуу налууг хоёр дахин болго. Эзэн хэлний escape-ийг JSON escape-тай хольж болохгүй. Түгээмэл JSON алдаа: төгсгөлийн таслал, хашилт болон Unexpected token үүнийг гүнзгий хамарна.
Буруу
{"file":"C:\Users\Alex"}
Зөв
{"file":"C:\\Users\\Alex"}
5. JSON-ийн өмнөх эсвэл дараах илүү текст
JSON.parse нэг JSON утга хүлээнэ. {“ok”:true}-ийн өмнөх Success: угтвар, эсвэл араас done дагавар бүхэл мөрийг буруу болгоно. Нэг JSON утгын эргэн тойрон дахь ач холбогдолгүй зай зөвшөөрөгдөнө. JSON утгын өмнө, хойно зай хориглодоггүй.
Success:
{"ok":true}
{"ok":true}
done
6. JSON-ийн оронд HTML задлах
HTML хуудсанд response.json() дуудах нь нийтлэг Unexpected token тохиолдол. Буруу endpoint, 404 эсвэл 500 HTML хуудас, нэвтрэлтийн чиглүүлэлт, прокси бие, нөөц хуудас ихэвчлэн тэмдэглэгээгээр эхэлнэ. «Unexpected token < үргэлж HTML» хэт хүчтэй: < нь зөвлөмж, нотолгоо биш.
fetch('/api/data')
.then(response => response.json())
“Unexpected token <” ихэвчлэн юу гэсэн үг вэ?
JSON утга ихэвчлэн <-ээр эхэлдэггүй. Бие эсвэл -ээр эхэлбэл < эхний хууль бус тэмдэгт байж болно. Орон нутгийн засварт HTTP төлөв, Content-Type, түүхий биеийг шалга. Хөдөлгүүрийн үг хэллэг өөр хэвээр.
Задлахаас өмнө хариуг шалга
fetch биеийг зөвхөн нэг удаа хэрэглэж болно. Орон нутгийн засварт эхлээд text() унш, богино угтварыг хар, дараа нь тэр мөрт JSON.parse хэрэглэ. Нэг хариунд эхлээд response.json(), дараа нь response.text() бүү дууд. Үйлдвэрлэлийн мэдрэмтгий ачааллыг анхдагчаар бүү бүртгэ.
const response = await fetch(url);
const text = await response.text();
console.log(response.status);
console.log(response.headers.get("content-type"));
console.log(text.slice(0, 200));
try {
const data = JSON.parse(text);
console.log(data);
} catch (error) {
console.error("Invalid JSON:", error);
}
“at position 123” юу гэсэн үг вэ?
Зарим хөдөлгүүр байрлал, мөр, багана мэдээлнэ. Ойролцоо буруу хашилт, таслал, хаалт, escape хай. Тэр индекс задлалт асуудал анзаарсан газар; жинхэнэ шалтгаан өмнө байж болно. Яг гэмтсэн тэмдэгт гэдэг баталгаагүй.
Unexpected token Unexpected end-ийн эсрэг
Unexpected token нь задлагч хүлээгээгүй тэмдэгттэй тааралдсан гэсэн үг. Unexpected end оролт утга дуусаагүй зогсоход гарч болно, жишээ нь {“name”:“Alex” хаах хаалтгүй. Яг үг хэллэг хөдөлгүүрээс хамаарна. Түгээмэл JSON алдаа: төгсгөлийн таслал, хашилт болон Unexpected token дутуу JSON-ийг өргөнөөр хамарна.
{"name":"Alex"
JSON нь JavaScript объектын литералтай ижил биш
JSON бол өгөгдлийн формат. JavaScript объектын литерал бол JavaScript синтакс. Хашилтгүй түлхүүр, ганц хашилт, төгсгөлийн таслалтай JS объект зөв JSON текст биш. JSON.parse JavaScript объектын литералыг аюулгүй задлаж чадахгүй.
const data = {
name: 'Alex',
active: true,
};
{
"name": "Alex",
"active": true
}
JSON тайлбар агуулж болох уу?
Стандарт JSON тайлбарыг дэмждэггүй. Объект доторх // мөр буруу. JSON5 болон төстэй өргөтгөл өөр формат. JSON форматлах / Diff стандарт JSON-ийг JSON.parse-аар шалгана, JSON5-ийг JSON гэж үзэхгүй.
{
// user name
"name": "Alex"
}
undefined, NaN, Infinity зөв JSON уу?
Үгүй. JSON утга нь объект, массив, мөр, тоо, true, false, null. undefined, NaN, Infinity биш. Дээд түвшний утга объект эсвэл массив байх албагүй: true, 123, “hello”, null зөв JSON.
{"a":undefined}
{"a":NaN}
{"a":Infinity}
true
123
"hello"
null
Unexpected token алдааг алхам алхмаар хэрхэн засах
Алдааны мөр биш, эх үүсвэр дээр ажилла:
- Оролт үнэхээр JSON эсэхийг батал, HTML, бүртгэл, JavaScript биш.
- Түүхий оролтын эхний тэмдэгтийг шалга.
- API-аас ирсэн бол HTTP төлөв, Content-Type шалга. 200 ч, application/json ч зөв JSON батлахгүй.
- Синтаксийг JSON задлагчид шалга.
- Мэдээлсэн байрлал, мөр, баганыг зөвлөмж болгож хэрэглэ, баталгаатай үндсэн шалтгаан биш.
- Тэр бүсийн ойролцоо хашилт, таслал, буржгар хаалт, дөрвөлжин хаалт, escape шалга.
- Форматласан, шалгасан хуулбартай харьцуул.
- Сериалжуулагч эсвэл endpoint-ийг засаарай. Мэдээлсэн токеныг санамсаргүй бүү устга.
'-г "-ээр дэлхий даяар солих нь мөр доторх апостроф, аль хэдийн escape хийсэн текст, JSON биш эхийг эвдэж болно. Зөв JSON-ийг жинхэнэ сериалжуулагчаас гарга. eval-ийг JSON задлагч гэж бүү үз.
JavaScript-д JSON үйлдвэрлэхдээ JSON.stringify() хэрэглэ
Мөрийг гараар холбохоос JSON.stringify-ийг илүүд үз. Сериалжуулсан утгад зөв JSON текст гаргана. Бүх JavaScript утгыг хадгалахгүй: undefined, функц, тэмдэгт тусгай зан үйлтэй. Энэ дэлгэрэнгүй энд хамрах хүрээнээс гадна.
const data = {
name: "Alex",
active: true
};
const json = JSON.stringify(data);
// {"name":"Alex","active":true}
Буруу JSON жинхэнэ засварын эсрэг
Эдгээр хосыг JSON.parse-аар шалгасан. HTML-д засвар нь хариу, синтакс засвар биш.
| Асуудал | Буруу | Засвар |
|---|---|---|
| Ганц хашилт | {'a':1} |
{"a":1} |
| Төгсгөлийн таслал | {"a":1,} |
{"a":1} |
| Хашилтгүй түлхүүр | {a:1} |
{"a":1} |
| undefined | {"a":undefined} |
{"a":null} |
| HTML бие | <html>... |
Endpoint болон түүхий хариуг шалга. HTML-ийг JSON болгож бүү зассаарай. |
Unexpected token-ийн энгийн шийдвэрийн заавар
JSON.parse унасан бол хашилтыг дахин бичихээсээ өмнө JSON байгаа эсэхээ шийд.
- JSON.parse унасан
- API-аас уу? Төлөв, Content-Type, түүхий биеийг шалга
- JSON-оор эхэлж байна уу? Үгүй бол эх эсвэл endpoint-ийг засаарай
- Тийм бол хашилт, таслал, хаалт, дөрвөлжин хаалт, escape, дэмжигдээгүй утгыг шалга
- Мэдээлсэн байрлалыг зөвлөмж болгож хэрэглэ
- Эхийг засаад дахин задла
Задлах эсвэл хэрэглэхээсээ өмнө JSON шалга
NEXNARA JSON форматлах / Diff хөтөч дээр JSON-ийг JSON.parse-аар шалгана—eval биш.
Шалга, 2 зай, 4 зай эсвэл табаар гоё болго, minify, хуул, татаж ав, .json байршуул. JSON Diff давхарласан объект, массив, зам, хураангуй, шүүлтүүр, солихыг хамарна. Задалсны дараа ижил өгөгдлийн гоё болон minify хуулбар тэнцүү харьцуулагдана; объектын түлхүүр нэрээр харьцуулагдана.
5 MB-ээс том текст удаан санагдаж болно. 15 MB-ээс том текстийг хөтөч дээр боловсруулахгүй.
JSON шалгалт, формат таны хөтөч дээр болно. Энэ хэрэгсэл JSON-ийг NEXNARA серверт илгээдэггүй. Зар, сайтын бусад онцлог сүлжээ ашигласаар.
Унаж буй мөрийг JSON форматлах / Diff руу буулгаад хашилтыг дахин бичихээсээ өмнө эхний тэмдэгтийг унш.
FAQ
JSON.parse яагаад Unexpected token гэж хэлдэг вэ?
Текст задлагч зогссон цэгт зөв JSON биш. Ердийн шалтгаан: хашилт, таслал, илүү текст, эсвэл HTML зэрэг JSON биш бие.
Unexpected token < in JSON юу гэсэн үг вэ?
Эхний хууль бус тэмдэгт < байж болно. Энэ ихэвчлэн HTML хуудас руу заана, гэхдээ бүх тохиолдолд 404 эсвэл HTML-ийн нотолгоо биш. Төлөв, Content-Type, түүхий биеийг шалга.
JSON-д алдааны байрлалыг хэрхэн олох вэ?
Хөдөлгүүр байрлал, мөр, багана мэдээлбэл ойр хараарай. Жинхэнэ алдаа өмнө байж болно. Зөвлөмж болгож хэрэглээд дараа нь шалга.
JSON ганц хашилт ашиглаж болох уу?
Үгүй. Стандарт JSON мөр, гишүүний нэр давхар хашилт ашиглана.
JSON төгсгөлийн таслалтай байж болох уу?
Үгүй. Стандарт JSON сүүлийн шинж эсвэл массивын элементийн дараа таслал зөвшөөрдөггүй.
Мөр зөв JSON эсэхийг хэрхэн шалгах вэ?
try/catch дотор JSON.parse дууд, эсвэл текстийг JSON форматлах / Diff руу буулга. Задалт SyntaxError шидвэл мөр зөв JSON биш.