Tech Help

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.parse দিয়ে মানক JSON যাচাই করে এবং 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 ত্রুটি ধাপে ধাপে কীভাবে ঠিক করবেন

ত্রুটির স্ট্রিংয়ে নয়, উৎসে কাজ করুন:

  1. নিশ্চিত করুন ইনপুট সত্যিই JSON, HTML, লগ বা JavaScript নয়।
  2. কাঁচা ইনপুটের প্রথম অক্ষর দেখুন।
  3. API থেকে এলে HTTP স্ট্যাটাস ও Content-Type দেখুন। 200 বা application/json কেউই বৈধ JSON নিশ্চিত করে না।
  4. সিনট্যাক্স JSON পার্সারে যাচাই করুন।
  5. জানা অবস্থান, লাইন বা কলাম ইঙ্গিত হিসেবে ব্যবহার করুন, নিশ্চিত মূল কারণ হিসেবে নয়।
  6. সেই এলাকার কাছে উদ্ধৃতি, কমা, ব্রেস, ব্র্যাকেট ও এস্কেপ দেখুন।
  7. ফরম্যাট করা, যাচাই করা কপির সাথে তুলনা করুন।
  8. সিরিয়ালাইজার বা endpoint ঠিক করুন। জানানো টোকেন এলোমেলো মুছবেন না।
উদ্ধৃতি এলোমেলো বদলে JSON «ঠিক» করবেন না

'-কে " দিয়ে বৈশ্বিক বদল স্ট্রিংয়ের ভিতরের অ্যাপস্ট্রফি, আগে থেকে এস্কেপ করা পাঠ্য ও অ-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 ঠিক করুন
  • হলে উদ্ধৃতি, কমা, ব্রেস, ব্র্যাকেট, এস্কেপ, অসমর্থিত মান যাচাই করুন
  • জানানো অবস্থান ইঙ্গিত হিসেবে ব্যবহার করুন
  • উৎস ঠিক করুন, তারপর আবার পার্স করুন
Unexpected token বিস্ময়ের নাম দেয়। পাঠ্যের উৎস প্রায়ই আসল সংশোধন।

পার্স বা ব্যবহারের আগে JSON যাচাই করুন

NEXNARA JSON ফরম্যাটার ও তুলনা ব্রাউজারে JSON.parse দিয়ে JSON যাচাই করে—eval দিয়ে নয়।

যাচাই, ২ স্পেস, ৪ স্পেস বা ট্যাব দিয়ে প্রিটি-প্রিন্ট, মিনিফাই, কপি, ডাউনলোড ও .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 নয়।

Tech Help

সাধারণ JSON ত্রুটি: ট্রেলিং কমা, উদ্ধৃতি এবং Unexpected token

অবৈধ JSON ঠিক করুন: ট্রেলিং কমা, একক উদ্ধৃতি, উদ্ধৃতিহীন কী, এবং Unexpected token। দেখুন JSON.parse কেন ব্যর্থ হয় এবং JSON কীভাবে যাচাই করবেন।

Tech Help

স্ক্রিনশটের জন্য JPG বনাম PNG: কোনটি ছোট?

বিষয়বস্তু অনুসারে স্ক্রিনশটের জন্য JPG বা PNG বেছে নিন: UI ও লেখা প্রায়ই PNG-তে তীক্ষ্ণ থাকে; ফটোভর্তি ফ্রেম JPEG-তে ছোট হতে পারে।

Tech Help

ছবির ফাইল আকার ঝাপসা না করে কীভাবে কমাবেন

ফটো ও ছবির ফাইল আকার কমান এবং গ্রহণযোগ্য দৃশ্যমান গুণমান রাখুন। আগে অতিরিক্ত মাত্রা বদলান, তারপর মাঝারি সংকোচন করুন, তারপর মানানসই ফরম্যাট বেছে নিন।

Tech Help

Unix Timestamp থেকে তারিখ: সেকেন্ড, মিলিসেকেন্ড ও UTC ব্যাখ্যা

Unix timestamp-কে তারিখে বদলান। সেকেন্ড বনাম মিলিসেকেন্ড, UTC বনাম স্থানীয় সময়, ISO 8601, এবং তারিখ থেকে epoch সময়ে ফেরার উপায় দেখুন।

Tech Help

Base64 ফাইল বড় করে কেন?

Base64 সাধারণত বাইনারি তথ্যকে প্রায় এক তৃতীয়াংশ বড় করে। 3 বাইট থেকে 4 অক্ষরের গঠন, প্যাডিং, Data URL-এর বাড়তি খরচ এবং সেই আকার কখন কাজে লাগে দেখুন।