আমি "অব্যাহত সিনট্যাক্স এরর: অপ্রত্যাশিত টোকেন ও" পেতে থাকি


306

আমি কিছু এইচটিএমএল / সিএসএস / জাভাস্ক্রিপ্ট শিখার চেষ্টা করছি, তাই আমি নিজেকে একটি শিক্ষণ প্রকল্প লিখছি।

ধারণা ছিল কোনও জসন ফাইলে এমন কিছু ভোকাবুলারি রয়েছে যা পরে একটি টেবিলে লোড করা হবে। আমি ফাইলটি লোড করতে এবং এর মানগুলির একটি মুদ্রণ করে নিয়েছি, তার পরে আমি মানগুলি টেবিলে লোড করার জন্য কোডটি লেখা শুরু করি।

এটি করার পরে আমি একটি ত্রুটি পেতে শুরু করেছি, সুতরাং আমি আমার লেখা সমস্ত কোড সরিয়ে দিয়েছি, আমাকে কেবল একটি লাইন (একই লাইন যা আগে কাজ করেছিল) দিয়ে রেখেছিল ... কেবল ত্রুটি এখনও আছে।

ত্রুটিটি নিম্নরূপ:

Uncaught SyntaxError: Unexpected token o
(anonymous function)script.js:10
jQuery.Callbacks.firejquery-1.7.js:1064
jQuery.Callbacks.self.fireWithjquery-1.7.js:1182
donejquery-1.7.js:7454
jQuery.ajaxTransport.send.callback

আমার জাভাস্ক্রিপ্ট কোডটি একটি পৃথক ফাইলে অন্তর্ভুক্ত রয়েছে এবং কেবল এটি:

function loadPageIntoDiv(){
    document.getElementById("wokabWeeks").style.display = "block";
}

function loadWokab(){
    //also tried getJSON which threw the same error
    jQuery.get('wokab.json', function(data) {
        var glacier = JSON.parse(data);
    });
}

এবং আমার JSON ফাইলটিতে এখনই নিম্নলিখিতটি রয়েছে:

[
    {
        "english": "bag",
        "kana": "kaban",
        "kanji": "K"
    },

    {
        "english": "glasses",
        "kana": "megane",
        "kanji": "M"
    }
]

এখন ত্রুটিটি লাইন 11 লাইনে রিপোর্ট করা হয়েছে var glacier = JSON.parse(data);

আমি যখন জসন ফাইলটি সরিয়ে ফেলি তখন আমার ত্রুটিটি পাওয়া যায়: "GET http: //.../wokab.json 404 (পাওয়া যায় না)" সুতরাং আমি জানি যে এটি লোড হচ্ছে (বা কমপক্ষে চেষ্টা করার চেষ্টা করছে)।


5
get। jget এটি প্রেরণ করার সাথে সাথে সনাক্ত করতে পারে। var glacier = data;যথেষ্ট করা উচিত
রোজালান

46
সংমিশ্রণ: আপনি এটি দুবার পার্স করার চেষ্টা করছেন।
ফিয়াটজফ


Uncaught SyntaxError: Unexpected token Iপাইথন এনকোডের কারণে আমি একইরকম পেয়েছিjson.dumps([float('inf'),float('nan')]) == '[Infinity, NaN]'
বব স্টেইন

উত্তর:


314

দেখে মনে হচ্ছে jQuery ডেটাটাইপ সম্পর্কে একটি অনুমান নেয়। আপনি জেএসএসএন () কল না করলেও এটি জেএসএন পার্সিং করে - তবে আপনি যখন কোনও জিনিসে জেএসএন.পার্স () কল করার চেষ্টা করবেন তখন আপনি ত্রুটি পেয়ে যাচ্ছেন।

আরও ব্যাখ্যা আদিত্য মিত্তালের উত্তরে পাওয়া যাবে ।


13
আহা, সুতরাং ডেটা [0] .আঙ্গালী "ব্যাগ" প্রদান করে। দেখে মনে হচ্ছে আমাকে জাসন ফাইলটি মোটেও পার্স করতে হবে না।
বজর্নি্ন

1
এটি আকর্ষণীয় .. আমার মনে হয় jquery ডেটাটাইপে একটি অনুমান নেয় এবং ধরে নেয় এটি জসন। আমি ভাবব যে getJson কাজ করবে ঠিক তখনই?
ek_ny

87
ছোট দ্রষ্টব্য: আপনি যদি JSON.parseকোনও বস্তুটি "অপ্রত্যাশিত টোকেন ও" ফেলে দেন কেবল কারণ এটি পার্স করার চেষ্টা করে obj_to_parse.toString()যা এটি [object Object]। চেষ্টা করুন JSON.parse('[object Object]');;)
পিয়ার পাওলো রামন

22
এটি আমার সাথেও ঘটেছিল, আমি মনে করি আমার ত্রুটিটি হ'ল আমি জেএসওএনকে এমন কিছু পার্স করার চেষ্টা করেছি যা ইতিমধ্যে একটি জেএসএন অবজেক্ট ছিল
ওয়াক

2
jQuery অনুমান করে না । যদি আপনি এটিকে ওভাররাইড না করেন dataType(যে কোনও কারণেই কেন), এটি Content-typeকোন ধরণের ডেটা তা নির্ধারণ করতে প্রতিক্রিয়াটির এইচটিটিপি শিরোনাম ব্যবহার করে এবং এটি যদি জিকুয়েরি স্বীকৃতি দেয় তবে পার্স করে।
কোয়ান্টিন

76

সমস্যা খুব সহজ

jQuery.get('wokab.json', function(data) {
    var glacier = JSON.parse(data);
});

আপনি এটি দুবার পার্স করছেন। getব্যবহার করে dataType='json', তাই ডেটা ইতিমধ্যে জসন ফর্ম্যাটে রয়েছে। $.ajax({ dataType: 'json' ...প্রত্যাশিত ডেটা টাইপ নির্দিষ্ট করে সেট করতে ব্যবহার করুন !


54

মূলত যদি প্রতিক্রিয়া শিরোনামটি পাঠ্য / এইচটিএমএল হয় তবে আপনাকে বিশ্লেষণ করতে হবে এবং প্রতিক্রিয়া শিরোনামটি যদি অ্যাপ্লিকেশন / জেএসন হয় তবে এটি ইতিমধ্যে আপনার জন্য পার্স করা হয়েছে।

পাঠ্য / এইচটিএমএল প্রতিক্রিয়ার জন্য jquery সাফল্য হ্যান্ডলার থেকে পার্স করা ডেটা:

var parsed = JSON.parse(data);

অ্যাপ্লিকেশন / জসন প্রতিক্রিয়ার জন্য jquery সাফল্য হ্যান্ডলার থেকে পার্সড ডেটা:

var parsed = data;

6
এটিকে ভোট দেওয়ার জন্য কারও কাছে নোট করুন, উপরে গৃহীত উত্তরের উত্তরটিতে এই উত্তর থেকে সঠিক কপি রয়েছে। এখনই গৃহীত উত্তর থেকে লিঙ্ক যুক্ত করা হচ্ছে।
জেফ্রি হেল

11

Unexpected tokenত্রুটির জন্য আরেকটি ইঙ্গিত । জাভাস্ক্রিপ্ট অবজেক্ট এবং জসনের মধ্যে দুটি প্রধান পার্থক্য রয়েছে:

  1. json ডেটা অবশ্যই সর্বদা ডাবল কোট দিয়ে উদ্ধৃত করা উচিত।
  2. কীগুলি অবশ্যই উদ্ধৃত করা উচিত

সঠিক JSON

 {
    "english": "bag",
    "kana": "kaban",
    "kanji": "K"
}

ত্রুটি JSON 1

 {
    'english': 'bag',
    'kana': 'kaban',
    'kanji': 'K'
 }

ত্রুটি JSON 2

 {
    english: "bag",
    kana: "kaban",
    kanji: "K"
}

মন্তব্য

এটি এই প্রশ্নের সরাসরি উত্তর নয়। তবে এটি Unexpected tokenত্রুটির জন্য একটি উত্তর । সুতরাং এটি অন্যদের যারা এই প্রশ্নে পদচারণা সাহায্য করতে পারে।


2

কেবলমাত্র প্রতিক্রিয়াটি ইতিমধ্যে পার্স করা হয়েছে, আপনার এটি আবার বিশ্লেষণ করার দরকার নেই। আপনি যদি এটি আবার বিশ্লেষণ করেন তবে এটি আপনাকে "অপ্রত্যাশিত টোকেন ও" দেবে তবে আপনাকে অনুরোধে ডেটাটাইপ নির্দিষ্ট করতে হবেdataType='json'


1

আমার ঠিক এখন একই ধরণের সমস্যা ছিল এবং আমার সমাধানটি সাহায্য করতে পারে। আমি কোনও এক্সএমএল ফাইলটিকে জসনোতে আপলোড এবং রূপান্তর করতে এবং এটিকে পর্দার পিছনে ফেরত পাঠানোর জন্য একটি আইফ্রেমে ব্যবহার করছি, এবং ক্রোম আগত তথ্যগুলিতে এমন কিছু আবর্জনা যোগ করছিল যা কেবল মাঝে মধ্যেই প্রদর্শিত হবে এবং "আনচাক্ট সিনট্যাক্স এরিয়ার: অপ্রত্যাশিত টোকেন ও" তৈরি করবে ত্রুটি.

আমি এই জাতীয় আইফ্রেম ডেটা অ্যাক্সেস করছিলাম:

$('#load-file-iframe').contents().text()

যা লোকালহোস্টে দুর্দান্ত কাজ করেছে, কিন্তু আমি যখন এটি সার্ভারে আপলোড করেছি তখন এটি কেবলমাত্র কিছু ফাইলের সাথে কাজ করা বন্ধ করে দেয় এবং কেবলমাত্র নির্দিষ্ট ক্রমে ফাইলগুলি লোড করার সময়। আমি আসলে জানি না কী কারণে এটি হয়েছিল তবে এটি এটি স্থির করেছে। আমি উপরের লাইনটি পরিবর্তন করেছি

$('#load-file-iframe').contents().find('body').text()

একবার আমি এইচটিএমএল প্রতিক্রিয়াতে কিছু আবর্জনা লক্ষ্য করেছি।

দীর্ঘ গল্পের সংক্ষিপ্ত বিবরণটি আপনার কাঁচা এইচটিএমএল প্রতিক্রিয়া ডেটা পরীক্ষা করুন এবং আপনি কিছু পরিবর্তন করতে পারেন।


ঠিক আছে ধন্যবাদ. আশ্চর্যজনকভাবে এটি কখনও কখনও মনে হয় ইতিমধ্যে একটি পার্সড জসন বস্তু পেয়েছে এবং কখনও কখনও তা পায় না। আমার প্রকল্পটি চালিয়ে যাওয়ার সময় নেই তাই আমি জানি না এটি এলোমেলোভাবে এটি করবে কিনা (ব্রাউজার এবং সিস্টেম বা কোনও কিছুর উপর নির্ভর করে)। পয়েন্টারের জন্য ধন্যবাদ আমি এটি মনে রাখব।
21:51

1
SyntaxError: Unexpected token o in JSON

আপনি যখন awaitএমন কোনও পদ্ধতির কীওয়ার্ডটি ব্যবহার করতে ভুলে যান যা জেএসওএন ডেটা ফেরত দেয় তখনও এটি ঘটে happens

উদাহরণ স্বরূপ:

async function returnJSONData()
{
   return "{\"prop\": 2}";
}

var json_str = returnJSONData();
var json_obj = JSON.parse(json_str);

নিখোঁজ হওয়ার কারণে একটি ত্রুটি ফেলবে await। আসলে যা ফিরে আসে তা একটি Promise[অবজেক্ট], এ নয় string

ঠিক করার জন্য যেমন অপেক্ষা করা ঠিক তেমন অপেক্ষা করুন:

var json_str = await returnJSONData();

এটি বেশ সুস্পষ্ট হওয়া উচিত, তবে ত্রুটিটি ডাকা হয় JSON.parse, সুতরাং আপনার পদ্ধতি কল এবং কলটির মধ্যে কিছু দূরত্ব থাকলে এটি মিস করা সহজ ।awaitJSON.parse


0

আপনার JSON ফাইলের আগে বা পরে কোনও অনুচ্ছেদে অক্ষর নেই তা নিশ্চিত করুন। একটি অপ্রচলিত হতে পারে? আপনি এইভাবে চেষ্টা করতে চাইতে পারেন:

[{"english":"bag","kana":"kaban","kanji":"K"},{"english":"glasses","kana":"megane","kanji":"M"}]

1
JSON.parse ( '[{ "ইংরেজি": "ব্যাগ", "কানা": "kaban", "কাঞ্জি": "কে"}, { "ইংরেজি": "চশমা", "কানা": "megane", " কাঞ্জি ":" এম "}]); ঠিকভাবে কাজ করে. The ফাইলটি সঠিকভাবে লোড হচ্ছে কিনা তা পরীক্ষা করার জন্য আপনি কি সতর্কতা (ডেটা) দিয়ে সেই লাইনটি প্রতিস্থাপনের চেষ্টা করেছেন?
thexebolud

0
const getCircularReplacer = () => {
              const seen = new WeakSet();
              return (key, value) => {
                if (typeof value === "object" && value !== null) {
                  if (seen.has(value)) {
                    return;
                  }
                  seen.add(value);
                }
                return value;
              };
            };
JSON.stringify(tempActivity, getCircularReplacer());

টেম্প্যাক্টিভিটি ডেটা আনছে যেখানে ত্রুটিটি তৈরি করে "সিনট্যাক্স এরির: জেএসএন-তে অপ্রত্যাশিত টোকেন ও পজিশনে 1 - স্ট্যাক ওভারফ্লো"

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.