तकनीकी सहायता
JSON.parse "Unexpected token" क्यों कहता है?
जब पाठ मान्य JSON नहीं होता तो JSON.parse Unexpected token फेंकता है। एकल उद्धरण, अंत का अल्पविराम, HTML प्रतिक्रियाएँ और त्रुटि स्थिति डिबग करें।
जब इनपुट मान्य JSON नहीं होता तो JSON.parse() SyntaxError फेंकता है। «Unexpected token» का सामान्य अर्थ है कि पार्सर संरचना के उस बिंदु पर एक ऐसा वर्ण पहुँचा जिसकी अनुमति नहीं है।
आम कारणों में एकल उद्धरण, अंत का अल्पविराम, बिना उद्धरण के गुण नाम, गलत स्ट्रिंग एस्केप, JSON के इर्द-गिर्द अतिरिक्त पाठ, या HTML या कोई गैर-JSON बॉडी को JSON की तरह पार्स करना शामिल हैं।
त्रुटि का ठीक शब्द JavaScript इंजन और ब्राउज़र के अनुसार बदलता है। यह न मानें कि हर रनटाइम «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. अमान्य स्ट्रिंग एस्केप
JSON पाठ में बैकस्लैश एस्केप शुरू करता है। C:\Users\Alex जैसा कच्चा पथ अमान्य है क्योंकि \U वैध एस्केप नहीं है। बैकस्लैश दोगुने करें। होस्ट-भाषा स्ट्रिंग एस्केप को JSON एस्केप से न मिलाएँ। आम 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” का क्या अर्थ है?
कुछ इंजन स्थिति, पंक्ति या स्तंभ बताते हैं। पास में खराब उद्धरण, अल्पविराम, ब्रेस या एस्केप देखें। वह इंडेक्स जहाँ पार्स ने समस्या देखी; असल कारण पहले हो सकता है। यह ठीक दोषपूर्ण वर्ण होने की गारंटी नहीं।
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 फ़ॉर्मैट और तुलना मानक 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 पार्सर में मान्य करें।
- बताई गई स्थिति, पंक्ति या स्तंभ को संकेत मानें, गारंटीकृत मूल कारण नहीं।
- उस क्षेत्र के पास उद्धरण, अल्पविराम, ब्रेस, ब्रैकेट और एस्केप जाँचें।
- फ़ॉर्मैट की गई, मान्य प्रति से तुलना करें।
- सीरियलाइज़र या endpoint ठीक करें। बताए गए टोकन को यादृच्छिक न मिटाएँ।
' को " से वैश्विक बदल स्ट्रिंग के अंदर एपॉस्ट्रॉफ़ी, पहले से एस्केप किया पाठ, और गैर-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 ठीक करें
- यदि हाँ, उद्धरण, अल्पविराम, ब्रेस, ब्रैकेट, एस्केप, असमर्थित मान जाँचें
- बताई गई स्थिति को संकेत बनाएँ
- स्रोत ठीक करें, फिर फिर पार्स करें
पार्स या उपयोग से पहले JSON मान्य करें
NEXNARA JSON फ़ॉर्मैट और तुलना ब्राउज़र में JSON.parse से JSON मान्य करता है—eval से नहीं।
मान्य करें, 2 स्पेस, 4 स्पेस या टैब से प्रीटी-प्रिंट, मिनिफ़ाई, कॉपी, डाउनलोड और .json अपलोड। JSON Diff नेस्टेड ऑब्जेक्ट और ऐरे, पथ, सारांश, फ़िल्टर और स्वैप कवर करता है। पार्स के बाद उसी डेटा की प्रीटी और मिनिफ़ाइड प्रतियाँ बराबर तुलना होती हैं; ऑब्जेक्ट कुंजी नाम से तुलना होती हैं।
5 MB से बड़ा पाठ धीमा लग सकता है। 15 MB से बड़ा पाठ ब्राउज़र में प्रोसेस नहीं होता।
JSON मान्यता और फ़ॉर्मैटिंग आपके ब्राउज़र में होती है। यह टूल JSON किसी NEXNARA सर्वर को नहीं भेजता। विज्ञापन और साइट की अन्य सुविधाएँ अभी भी नेटवर्क इस्तेमाल करती हैं।
असफल स्ट्रिंग JSON फ़ॉर्मैट और तुलना में चिपकाएँ और उद्धरण फिर लिखने से पहले पहले वर्ण पढ़ें।
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 फ़ॉर्मैट और तुलना में चिपकाएँ। यदि पार्स SyntaxError फेंके तो स्ट्रिंग मान्य JSON नहीं है।