Tech Help

Հաճախակի JSON սխալներ՝ վերջի ստորակետ, չակերտներ և Unexpected token

Ուղղեք անվավեր JSON՝ վերջի ստորակետ, մեկ չակերտ, չակերտներ չունեցող բանալիներ և Unexpected token։ Ինչու է JSON.parse-ը ձախողվում և ինչպես ստուգել JSON։

Արագ պատասխան

JSON սխալների մեծ մասը գալիս է խիստ կանոններից՝ վերջի ստորակետ, մեկ չակերտ, չակերտներ չունեցող հատկության անուններ, բացակայող ստորակետ, անհամապատասխան փակագծեր, անվավեր escape կամ մեկնաբանություններ։

JSON-ը նման է JavaScript օբյեկտի, բայց ավելի խիստ է։ Հատկության անուններին և տողերին պետք են կրկնակի չակերտներ։

Եթե տեսնում եք Unexpected token, հաղորդված նիշը կարող է լինել այն տեղը, որտեղ վերլուծությունը կանգնել է՝ ոչ անպայման այն, որտեղ սկսվել է սկզբնական սխալը։

Ձեր JSON-ը նշված է որպես անվավեր։ Սովորաբար դա փոքր շարահյուսական խնդիր է, ոչ կոտրված ֆայլի ձևաչափ։ Ստորև յոթ սխալները առաջացնում են Unexpected token-ների մեծ մասը։

Ինչու է JSON-ը այդքան հեշտ կոտրվում։

JSON-ը տվյալների ձևաչափ է խիստ շարահյուսությամբ։ JavaScript օբյեկտի լիտերալը կարող է նման երևալ և դեռ անվավեր JSON լինել։ Ստանդարտ JSON-ում հատկության անուններին և տողերին պետք են կրկնակի չակերտներ, վերջի ստորակետը թույլատրված չէ, և մեկնաբանությունները ձևաչափի մաս չեն։

1. Վերջի ստորակետներ

Վերջին հատկությունից հետո ավելորդ ստորակետը խնդիրն է։ Ստանդարտ JSON-ը չի թույլատրում։

Անվավեր

{
  "name": "Alex",
  "age": 30,
}

Վավեր

{
  "name": "Alex",
  "age": 30
}

Նույն կանոնը վերաբերում է զանգվածներին։ Հանեք ստորակետը վերջին տարրից հետո։

Անվավեր

[
  "red",
  "green",
]

Վավեր

[
  "red",
  "green"
]

2. Մեկ չակերտ կրկնակիի փոխարեն

JavaScript-ը հաճախ ընդունում է մեկ չակերտ։ JSON-ը՝ ոչ։ Հատկության անուններն ու տողերի արժեքները պետք է օգտագործեն կրկնակի չակերտներ։

Անվավեր

{
  'name': 'Alex'
}

Վավեր

{
  "name": "Alex"
}

3. Չակերտներ չունեցող հատկության անուններ

JavaScript-ում երբեմն կարելի է գրել name առանց չակերտների։ JSON-ում յուրաքանչյուր հատկության անուն պետք է լինի կրկնակի չակերտներով տող։

Անվավեր

{
  name: "Alex",
  age: 30
}

Վավեր

{
  "name": "Alex",
  "age": 30
}

4. Արժեքների միջև բացակայող ստորակետներ

Հատկություններին և զանգվածի տարրերին միջև ստորակետ է պետք։ Վերլուծիչը կարող է Unexpected token հաղորդել հաջորդ չակերտի կամ փակագծի վրա, ոչ բացակայող ստորակետի վրա։

Անվավեր

{
  "name": "Alex"
  "age": 30
}

Վավեր

{
  "name": "Alex",
  "age": 30
}

5. Բացակայող կամ ավելորդ փակագծեր

Օբյեկտները օգտագործում են { }։ Զանգվածները՝ [ ]։ Ներդրված JSON-ը հաճախ ձախողվում է, երբ ] բացակայում է, } ավելորդ է կամ երկուսը փոխված են։ Հաշվեք բացման և փակման զույգերը։

Անվավեր

{
  "items": [1, 2
}

Վավեր

{
  "items": [1, 2]
}

6. Անվավեր escape հաջորդականություններ

JSON տողում հետշեղը սկսում է escape։ Հաջորդականություններ, ինչպես ", \ և \n, վավեր են։ Windows ուղին՝ գրված C:\Users, չէ՝ \U օրինական JSON escape չէ։ Կրկնապատկեք հետշեղերը, այլապես վերլուծիչը կանգնում է այդ նիշի վրա։

Անվավեր

{"file":"C:\Users\Alex"}

Վավեր

{"file":"C:\\Users\\Alex"}

7. Մեկնաբանություններ JSON-ում

Ստանդարտ JSON-ում մեկնաբանություններ չկան։ Որոշ կարգավորման գործիքներ ընդունում են // կամ /* */ (JSONC, JSON5 և նման)։ Դա ստանդարտ JSON չէ, և JSON.parse-ը մերժում է։

Անվավեր

{
  // user name
  "name": "Alex"
}

Ի՞նչ է նշանակում Unexpected token։

Վերլուծիչը հանդիպել է նիշի, որը այդ դիրքում թույլատրված չէր։ Հաղորդված կետը այն է, որտեղ կարդալը կանգնել է։ Եթե ավելի վաղ բաց եք թողել ստորակետ, սխալը կարող է ցույց տալ հաջորդ հատկության չակերտին։ Ձևակերպումը տարբերվում է ըստ գործարկման միջավայրի․ մի սպասեք, որ ամեն դիտարկիչ տպի նույն նախադասությունը։

Ի՞նչ է նշանակում Unexpected end of JSON input։

Տեքստը ավարտվել է նախքան արժեքը ամբողջանալը։ Տիպիկ պատճառներ՝ բացակայող } կամ ], կտրված մուտք, դատարկ մարմին կամ կտրված API պատասխան։ Միակ սխալ չէ։

Ինչու է JSON.parse()-ը ձախողվում։

JSON.parse()-ը ընդունում է միայն վավեր JSON տեքստ։ Սա հաջողվում է․

const text = '{"name":"Alex"}';
const data = JSON.parse(text);

Սա ձախողվում է, որովհետև մեկ չակերտը JSON չէ․

const text = "{'name':'Alex'}";
JSON.parse(text);

Ճշգրիտ սխալի հաղորդագրությունը կախված է JavaScript գործարկման միջավայրից։ Հաղորդագրությունը դիտարկեք որպես ակնարկ, ապա ստուգեք ստորակետներ, չակերտներ և փակագծեր այդ դիրքի մոտ։

JSON-ը նույնը չէ, ինչ JavaScript օբյեկտը

JavaScript օբյեկտի լիտերալը կարող է երևալ որպես { name: 'Alex' }։ Վավեր JSON-ը պետք է երևա որպես { "name": "Alex" }՝ կրկնակի չակերտներով անուններ և տողեր, առանց վերջի ստորակետի, առանց մեկնաբանությունների։

  • JSON տեքստ
  • Վերլուծիչը կարդում է նշաններ
  • Վավեր տվյալներ կամ Unexpected token
Սխալի նշանը այն է, որտեղ վերլուծությունը կանգնել է, ինչը կարող է լինել իրական սխալից հետո։

Ինչպես արագ գտնել JSON սխալ

Աշխատեք այս հերթականությամբ։ Մի սկսեք ամբողջ ֆայլը վերագրելով։

  1. Անցկացրեք JSON-ը վավերացնողով։
  2. Կարդացեք առաջին հաղորդված սխալը։
  3. Նայեք մի քիչ առաջ հաղորդված դիրքից։
  4. Ստուգեք ստորակետները, հատկապես վերջինները և բացակայողները։
  5. Ստուգեք չակերտները՝ միայն կրկնակի։
  6. Համապատասխանեցրեք { } և [ ]։
  7. Ստուգեք հետշեղի escape-երը տողերում։
  8. Հանեք մեկնաբանությունները, եթե պետք է խիստ JSON։

Սովորական ուղղումների արագ քարտեզ․

Խնդիր Ուղղում
Վերջի ստորակետՋնջեք ստորակետը վերջին տարրից հետո։
Մեկ չակերտՕգտագործեք կրկնակի չակերտներ անունների և տողերի համար։
Բանալի առանց չակերտներիՓաթաթեք հատկության անունը կրկնակի չակերտներով։
Բացակայող ստորակետԴրեք ստորակետ հատկությունների կամ զանգվածի տարրերի միջև։
Բացակայող փակագիծՓակեք յուրաքանչյուր { } և [ ] զույգ։
Անվավեր escapeՕգտագործեք օրինական escape կամ կրկնապատկեք հետշեղերը ուղիներում։
ՄեկնաբանությունՀանեք // և /* */ ստանդարտ JSON-ի համար։

Ստուգեք և ձևաչափեք JSON դիտարկիչում

NEXNARA JSON ձևաչափում / Diff-ը կարող է ստուգել JSON այս սարքում։

Կարող եք վավերացնել, գեղեցկացնել 2 բացատով, 4 բացատով կամ ներդիրով, minify, համեմատել երկու փաստաթուղթ (JSON Diff) և բացել .json ֆայլ։ Վերլուծությունը օգտագործում է JSON.parse դիտարկիչում, ոչ eval։

5 MB-ից մեծ փաստաթղթերը կարող են դանդաղ թվալ։ 15 MB-ից մեծ տեքստը չի մշակվում դիտարկիչում, որպեսզի էջը մնա արձագանքող։

JSON մշակումն ինքնին տեղի է ունենում ձեր դիտարկիչում։ Տեքստը չի ուղարկվում NEXNARA սերվեր այս գործիքի համար։ Գովազդներն ու կայքի այլ հնարավորությունները դեռ օգտագործում են ցանցը․ դա առանձին է մշակումից։

Պետք է ստուգել անվավեր JSON։ Բացեք JSON ձևաչափում / Diff և տեղադրեք տեքստը։

FAQ

Ինչու է իմ JSON-ը ասում Unexpected token։

Վերլուծիչը հանդիպել է նիշի, որը այնտեղ թույլատրված չէր։ Իրական սխալը՝ հաճախ բացակայող ստորակետ կամ մեկ չակերտ, կարող է նստել հենց այդ դիրքից առաջ։

Թույլատրվա՞ծ են վերջի ստորակետները JSON-ում։

Ոչ։ Ստանդարտ JSON-ը չի թույլատրում ստորակետ վերջին հատկությունից կամ զանգվածի տարրից հետո։ JavaScript օբյեկտի լիտերալները հաճախ թույլատրում են։

Կարո՞ղ է JSON-ը օգտագործել մեկ չակերտ։

Ոչ։ Հատկության անուններն ու տողերը պետք է օգտագործեն կրկնակի չակերտներ։

Կարո՞ղ է JSON-ը պարունակել մեկնաբանություններ։

Ոչ ստանդարտ JSON-ում։ Որոշ գործիքներ ընդունում են JSONC կամ JSON5 մեկնաբանություններով․ JSON.parse-ը դեռ մերժում է։

Ինչու է JSON.parse()-ը ձախողվում։

Տողը վավեր JSON չէ։ Տիպիկ պատճառներ են վերջի ստորակետը, մեկ չակերտը, չակերտներ չունեցող բանալիները, մեկնաբանությունները կամ կտրված արժեքը։ Ճշգրիտ հաղորդագրությունը կախված է գործարկման միջավայրից։

Ինչպե՞ս ստուգեմ, արդյոք JSON-ը վավեր է։

Տեղադրեք այն վավերացնողում, ինչպես JSON ձևաչափում / Diff, կամ կանչեք JSON.parse վահանակում։ Եթե վերլուծությունը նետում է, տեքստը վավեր JSON չէ։