আনকচড সিনট্যাক্স এরিয়ার: জেএসএন.পার্সের সাথে অপ্রত্যাশিত টোকেন


190

তৃতীয় লাইনে এই ত্রুটির কারণ কী?

var products = [{
  "name": "Pizza",
  "price": "10",
  "quantity": "7"
}, {
  "name": "Cerveja",
  "price": "12",
  "quantity": "5"
}, {
  "name": "Hamburguer",
  "price": "10",
  "quantity": "2"
}, {
  "name": "Fraldas",
  "price": "6",
  "quantity": "2"
}];
console.log(products);
var b = JSON.parse(products); //unexpected token o

ত্রুটি দেখতে কনসোল খুলুন


16
আপনার কোন জেএসএন নেই? এটি একটি অ্যারে / অবজেক্ট আক্ষরিক।
বার্গি

উত্তর:


219

productsএকটি বস্তু। (একটি বস্তু আক্ষরিক থেকে তৈরি)

JSON.parse()JSON স্বরলিপিযুক্ত একটি স্ট্রিংটিকে জাভাস্ক্রিপ্ট অবজেক্টে রূপান্তর করতে ব্যবহার করা হয় ।

আপনার কোড বস্তুটিকে স্ট্রিং (কল করে .toString()) এ পরিণত করে JSON পাঠ্য হিসাবে পার্স করার চেষ্টা করার জন্য।
ডিফল্ট .toString()রিটার্ন "[object Object]", যা বৈধ JSON নয়; অতএব ত্রুটি।


1
এটি একটি অ্যারে না? কেন এটি একটি বিষয়। অবজেক্টগুলি with দিয়ে শুরু হয় এবং অ্যারেগুলি [দিয়ে শুরু হয়? বা আমি কি এখানে মিথ্যা

4
অ্যারে বস্তু হয়; এটাই .toString()প্রত্যাবর্তন (প্রতিবেদন অনুসারে)।
স্ল্যাक्स

1
সমাধানটি কি প্রথমে বস্তুর স্ট্রিংফাই করার জন্য?
মোহাম্মদ নুরাল্ডিন

6
@ মোহাম্মদ নূরল্ডিন: না; সমাধানটি কিছুই না করা এবং আপনার অবজেক্টটি ব্যবহার করা।
এসএলএক্স 0

1
আমি যদি আজাক্স ব্যবহার করে কোনও দূরবর্তী পরিষেবা থেকে আমার ডেটা পাই, যা আমাকে জসন প্রতিক্রিয়া ফিরিয়ে দেয়? এবং আমি সেই প্রতিক্রিয়াটি জাভাস্ক্রিপ্ট অ্যারে অবজেক্টে সংরক্ষণ করতে চাই?
মোহাম্মদ নুরাল্ডিন

126

আসুন আমরা বলি যে আপনি এটি বৈধ JSON জানেন কিন্তু আপনার এখনও এটি পাচ্ছেন ...

সেক্ষেত্রে সম্ভবত আপনার স্ট্রিংয়ের যে কোনও উত্স থেকে সেগুলি লুকানো / বিশেষ অক্ষর রয়েছে। আপনি যখন কোনও বৈধকারীর মধ্যে পেস্ট করেন, সেগুলি হারিয়ে যায় - তবে স্ট্রিংয়ে তারা এখনও সেখানে রয়েছে। সেই অক্ষরগুলি অদৃশ্য হলেও ভেঙ্গে যাবেJSON.parse()

যদি sআপনার কাঁচা JSON হয় তবে এটি দিয়ে এটি পরিষ্কার করুন:

// preserve newlines, etc - use valid JSON
s = s.replace(/\\n/g, "\\n")  
               .replace(/\\'/g, "\\'")
               .replace(/\\"/g, '\\"')
               .replace(/\\&/g, "\\&")
               .replace(/\\r/g, "\\r")
               .replace(/\\t/g, "\\t")
               .replace(/\\b/g, "\\b")
               .replace(/\\f/g, "\\f");
// remove non-printable and other non-valid JSON chars
s = s.replace(/[\u0000-\u0019]+/g,""); 
var o = JSON.parse(s);

আমি ত্রুটি পাচ্ছিলাম এবং আমি এটি স্ট্রিংয়ের মধ্যে একটি অদ্ভুত চরিত্রের কাছে ট্র্যাক করেছি। আমি আপনার বৈধ JSON অক্ষর অপসারণের পদ্ধতিটি ব্যবহার করেছি এবং এটি কার্যকর হয়েছে।
আলবার্তস্কি

1
এখানে এখন দু'বার এসেছি। thnx
বেনিয়ামিন হফম্যান

বেস64 64 dec od od od tra od after after after after after after od od od od od od থেক্স
গিলাইম

অবৈধ JSON এর সাথে প্রতিক্রিয়া জানিয়ে এমন কোনও উত্সকে বিশ্বাস করবেন না। কেবল তাদের অবহিত করুন যে ডেটাটি দূষিত। তাদের এটি ঠিক করা উচিত। যদি আপনি এইভাবে বা অনুরূপভাবে প্রতিক্রিয়াটিকে "পুনরুদ্ধার" করার চেষ্টা করেন, আপনি অস্থির যোগাযোগ রাখবেন।
ওনুর ইল্ডারিয়াম

হওয়া উচিত s = s.replace(/[\u0000-\u001F]+/g,""); পরিবর্তে s = s.replace(/[\u0000-\u0019]+/g,""); , সমস্ত কন্ট্রোল ক্যারেক্টার প্রতিস্থাপন জন্য। রাইট?
হংচাওজ্যাং

63

দেখে মনে হচ্ছে আপনি অবজেক্টটি স্ট্রিংফাই করতে চান । সুতরাং এটি করুন:

JSON.stringify(products);

ত্রুটির কারণ হ'ল JSON.parse()একটি Stringমান প্রত্যাশা করে এবং productsএটি একটি Array

দ্রষ্টব্য: আমি মনে করি এটি চেষ্টা করে json.parse('[object Array]')যা অভিযোগ করে যা এর oপরে টোকেন আশা করে না [


28

আমি একই সমস্যা খুঁজে পেয়েছি JSON.parse(inputString)

আমার ক্ষেত্রে ইনপুট স্ট্রিংটি আমার সার্ভার পৃষ্ঠা থেকে আসছে [কোনও পৃষ্ঠা পদ্ধতির প্রত্যাবর্তন]

আমি মুদ্রিত করেছি typeof(inputString)- এটি স্ট্রিং ছিল, তবুও ত্রুটি ঘটে।

আমি চেষ্টাও করেছি JSON.stringify(inputString), কিন্তু তাতে কোন লাভ হয়নি।

পরে আমি এটি নতুন [\n]ক্ষেত্রের অপারেটরের ক্ষেত্রে ক্ষেত্রের মানের মধ্যে একটি সমস্যা বলে মনে করেছি ।

আমি একটি প্রতিস্থাপন করেছি [অন্য কোনও চরিত্রের সাথে, পার্সের পরে নতুন লাইনটি রেখেছি ] এবং সবকিছু ঠিকঠাক চলছে।


2
নতুন লাইনের চরিত্রটিও আমার সমস্যা ছিল। তাহলে আমরা কীভাবে এই জাতীয় ডেটা পুনরুদ্ধার করতে পারি?
কোলেণ্ডা

@ কোলেন্ডা আপনার অবৈধ জেএসওএন আছে। আপনাকে সত্যিকারের JSON সিরিয়ালাইজার ব্যবহার করতে আপনার সার্ভারটি পরিবর্তন করতে হবে যা বৈধ JSON প্রদান করে returns
এসএলএক্স

আমার একই রকম সমস্যা ছিল তবে "\ n" এর পরিবর্তে আমার একটি পথের ভিতরে "\ e" ছিল (আমি "" "এর পরিবর্তে সার্ভারের সাইড কোডটি" / "ব্যবহার করার জন্য পরিবর্তন করেছি এবং সবকিছু আবার কাজ করছে)
আদম তাল


13

JSON.parse প্যারামিটারে একটি স্ট্রিংয়ের জন্য অপেক্ষা করছে। সমস্যাটি সমাধান করার জন্য আপনাকে আপনার JSON অবজেক্টটি স্ট্রিংফাই করতে হবে।

products = [{"name":"Pizza","price":"10","quantity":"7"}, {"name":"Cerveja","price":"12","quantity":"5"}, {"name":"Hamburguer","price":"10","quantity":"2"}, {"name":"Fraldas","price":"6","quantity":"2"}];
console.log(products);
var b = JSON.parse(JSON.stringify(products));  //solves the problem

12
products = [{"name":"Pizza","price":"10","quantity":"7"}, {"name":"Cerveja","price":"12","quantity":"5"}, {"name":"Hamburguer","price":"10","quantity":"2"}, {"name":"Fraldas","price":"6","quantity":"2"}];

পরিবর্তন

products = '[{"name":"Pizza","price":"10","quantity":"7"}, {"name":"Cerveja","price":"12","quantity":"5"}, {"name":"Hamburguer","price":"10","quantity":"2"}, {"name":"Fraldas","price":"6","quantity":"2"}]';

2
@ এসএলক্স হ্যাঁ, ওপি সরাসরি পণ্য ব্যবহার করতে পারে। তবে তিনি যদি ব্যবহার করতে চান JSON.parseতবে আর্গুমেন্টগুলির একটি স্ট্রিং হওয়া দরকার।
pktangyue

এএসপি ক্লাসিকে আমার কী করা উচিত কারণ 'মন্তব্যটি
আশীষ ভাট

1
@ ইশিশভট্ট আপনি "ব্যবহার করতে পারেন, তারপরে অন্য সমস্ত" \ "তে পরিবর্তন করুন
pktangyue

2
এরকম কিছুJSON.parse(products.replace(/'/g, '"'))
কেমিক্যাল প্রোগ্রামার

10

আপনার JSON স্ট্রিংটি এখানে বৈধ করা উচিত ।

একটি বৈধ JSON স্ট্রিংয়ের কীগুলির চারপাশে ডাবল উক্তি থাকতে হবে:

JSON.parse({"u1":1000,"u2":1100})       // will be ok

যদি কোনও উদ্ধৃতি না থাকে তবে এটি একটি ত্রুটি ঘটায়:

JSON.parse({u1:1000,u2:1100})    
// error Uncaught SyntaxError: Unexpected token u in JSON at position 2

একক উদ্ধৃতি ব্যবহার করাও ত্রুটির কারণ হতে পারে:

JSON.parse({'u1':1000,'u2':1100})    
// error Uncaught SyntaxError: Unexpected token ' in JSON at position 1

আমার ক্ষেত্রে, গ্রিলস 2.5.6 render ([key: value])একক উদ্ধৃতি দিয়ে রেন্ডার করেছে , যার ফলে JSON পার্সিরর জ্যাকারি অ্যাজ্যাক্সের 1 নম্বরে রয়েছে। render (groovy.json.JsonOutput.toJson ([key:value]))আমাকে সাহায্য করেছে।
ফিলবার্নস


3
[
  {
    "name": "Pizza",
    "price": "10",
    "quantity": "7"
  },
  {
    "name": "Cerveja",
    "price": "12",
    "quantity": "5"
  },
  {
    "name": "Hamburguer",
    "price": "10",
    "quantity": "2"
  },
  {
    "name": "Fraldas",
    "price": "6",
    "quantity": "2"
  }
]

এখানে আপনার নিখুঁত জাসন যা পার্স করতে পারেন।


3

পূর্ববর্তী উত্তরের উপর ভিত্তি করে এখানে তৈরি একটি ফাংশন: এটি আমার মেশিনে কাজ করে তবে ওয়াইএমএমভি।

          /**
             * @description Converts a string response to an array of objects.
             * @param {string} string - The string you want to convert.
             * @returns {array} - an array of objects.
            */
            function stringToJson(input) {
              var result = [];

              //replace leading and trailing [], if present
              input = input.replace(/^\[/,'');
              input = input.replace(/\]$/,'');

              //change the delimiter to 
              input = input.replace(/},{/g,'};;;{');

              // preserve newlines, etc - use valid JSON
              ///programming/14432165/uncaught-syntaxerror-unexpected-token-with-json-parse
            input = input.replace(/\\n/g, "\\n")  
            .replace(/\\'/g, "\\'")
            .replace(/\\"/g, '\\"')
            .replace(/\\&/g, "\\&")
            .replace(/\\r/g, "\\r")
            .replace(/\\t/g, "\\t")
            .replace(/\\b/g, "\\b")
            .replace(/\\f/g, "\\f");
            // remove non-printable and other non-valid JSON chars
            input = input.replace(/[\u0000-\u0019]+/g,""); 

              input = input.split(';;;');

              input.forEach(function(element) {
                // console.log(JSON.stringify(element));

                result.push(JSON.parse(element));
              }, this);

              return result;
            }

2

"SyntaxError: Unexpected token"কল করার সময় ব্যতিক্রম হতে পারে এমন অন্য একটি গোটাছা JSON.parse()স্ট্রিংয়ের মানগুলিতে নিম্নোক্ত যে কোনওটি ব্যবহার করে:

  1. নতুন লাইন অক্ষর।

  2. ট্যাবগুলি (হ্যাঁ, আপনি যে ট্যাবগুলি ট্যাব কী দিয়ে তৈরি করতে পারেন!)

  3. যে কোনও একা একা স্ল্যাশ \(তবে কিছু কারণে নয় /, কমপক্ষে ক্রোমে নেই))

(সম্পূর্ণ তালিকার জন্য এখানে স্ট্রিং বিভাগটি দেখুন ))

উদাহরণস্বরূপ নিম্নলিখিতগুলি আপনাকে এই ব্যতিক্রমটি পাবেন:

{
    "msg" : {
        "message": "It cannot
contain a new-line",
        "description": "Some discription with a     tabbed space is also bad",
        "value": "It cannot have 3\4 un-escaped"
    }
}

সুতরাং এটিতে পরিবর্তন করা উচিত:

{
    "msg" : {
        "message": "It cannot\ncontain a new-line",
        "description": "Some discription with a\t\ttabbed space",
        "value": "It cannot have 3\\4 un-escaped"
    }
}

কোনটি, আমার বলা উচিত, এটি বৃহত পরিমাণে পাঠ্যের সাথে কেবল JSON- ফর্ম্যাটে একে অপঠনযোগ্য করে তোলে।



1

আশা করি এটি অন্য কাউকে সহায়তা করবে।

আমার সমস্যাটি হ'ল আমি একটি পিএইচপি কলব্যাক ফাংশনে এইজএক্সের মাধ্যমে এইচটিএমএল মন্তব্য করেছি যা মন্তব্যগুলিকে পার্স করে যাচ্ছিল এবং অবৈধ জেএসএনকে ফিরিয়েছিল।

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


0

পণ্যগুলি এমন একটি অ্যারে যা সরাসরি ব্যবহার করা যেতে পারে:

var i, j;

for(i=0;i<products.length;i++)
  for(j in products[i])
    console.log("property name: " + j,"value: "+products[i][j]);

0

এখন দৃশ্যত \r, \b, \t, \f, ইত্যাদি শুধুমাত্র সমস্যাযুক্ত অক্ষর যে আপনি এই এরর দিতে পারেন না।

নোট করুন যে কিছু ব্রাউজারের ইনপুটটির জন্য অতিরিক্ত প্রয়োজনীয়তা থাকতে পারে JSON.parse

আপনার ব্রাউজারে এই পরীক্ষার কোডটি চালান:

var arr = [];
for(var x=0; x < 0xffff; ++x){
    try{
        JSON.parse(String.fromCharCode(0x22, x, 0x22));
    }catch(e){
        arr.push(x);
    }
}
console.log(arr);

Chrome- এ টেস্টিং, আমি দেখতে এটি করার অনুমতি দেয় না JSON.parse(String.fromCharCode(0x22, x, 0x22));যেখানে x34, 92, বা 0 থেকে 31 হয়।

চর 34 এবং 92 হয় "এবং \যথাক্রমে অক্ষর, এবং তারা সাধারণত বলে আশা করা হয় এবং সঠিকভাবে পালিয়ে গিয়েছিলেন। এটি 0 থেকে 31 পর্যন্ত অক্ষর যা আপনাকে সমস্যা দেয়।

ডিবাগিংয়ে সহায়তা করতে, আপনার করার আগে JSON.parse(input), প্রথমে যাচাই করুন যে ইনপুটটিতে সমস্যাযুক্ত চরিত্রগুলি নেই:

function VerifyInput(input){
    for(var x=0; x<input.length; ++x){
        let c = input.charCodeAt(x);
        if(c >= 0 && c <= 31){
            throw 'problematic character found at position ' + x;
        }
    }
}

0

আপনার JSON.parse দরকার কেন? এটি ইতিমধ্যে বস্তুর বিন্যাসের অ্যারেতে রয়েছে।

নীচে হিসাবে ভাল ব্যবহার JSON.stringify: var b = JSON.stringify(products);

এটি আপনাকে সাহায্য করতে পারে।


0

ওহে মানুষ, এ পর্যন্ত সরবরাহিত উপরের সমস্ত উত্তরের সমাধানগুলি আমার পক্ষে কার্যকর হয়নি। আমার এখন একই ধরণের সমস্যা ছিল। আমি উদ্ধৃতি দিয়ে মুদ্রণ সঙ্গে এটি সমাধান করতে পরিচালিত। স্ক্রিনশট দেখুন। ছিঃ।

এখানে চিত্র বর্ণনা লিখুন

মূল:

var products = [{
  "name": "Pizza",
  "price": "10",
  "quantity": "7"
}, {
  "name": "Cerveja",
  "price": "12",
  "quantity": "5"
}, {
  "name": "Hamburguer",
  "price": "10",
  "quantity": "2"
}, {
  "name": "Fraldas",
  "price": "6",
  "quantity": "2"
}];
console.log(products);
var b = JSON.parse(products); //unexpected token o


0

আপনি যে ত্রুটিটি পেয়ে যাচ্ছেন অর্থাৎ "অপ্রত্যাশিত টোকেন ও" তা কারণ জেসন প্রত্যাশিত তবে বিশ্লেষণের সময় অবজেক্টটি পাওয়া যায়। "ও" হ'ল "অবজেক্ট" শব্দের প্রথম অক্ষর।


0

কেবলমাত্র আপনি যে ভুলটি করছেন তা হ'ল, আপনি ইতিমধ্যে পার্স করা বস্তুটিকে পার্স করছেন তাই এটি ত্রুটি ছুঁড়েছে, এটি ব্যবহার করুন এবং আপনি যেতে ভাল will

var products = [{
  "name": "Pizza",
  "price": "10",
  "quantity": "7"
}, {
  "name": "Cerveja",
  "price": "12",
  "quantity": "5"
}, {
  "name": "Hamburguer",
  "price": "10",
  "quantity": "2"
}, {
  "name": "Fraldas",
  "price": "6",
  "quantity": "2"
}];
console.log(products[0].name); //name of item at 0th index

আপনি যদি পুরো জেসন মুদ্রণ করতে চান তবে JSON.stringify () ব্যবহার করুন


0

এটি অনেক কারণেই ঘটতে পারে তবে সম্ভবত একটি অবৈধ চরের জন্য, তাই আপনি এটি ব্যবহার করতে পারেন JSON.stringify(obj);যা আপনার অবজেক্টটিকে একটি JSON এ পরিণত করবে তবে মনে রাখবেন যে এটি একটি জ্যাকুয়েরি এক্সপ্রেশন।


0

আমি এই ত্রুটিটি পেয়েছি কারণ এপিআই যে জেসন বস্তুটি একটি ত্রুটি দিচ্ছিল (আমার ক্ষেত্রে কোড ইগনিটার, পিএইচপি কোডটি ব্যর্থ হওয়ার পরে একটি এইচটিএমএল ফিরিয়ে দিন) তাই এটি কোনও জসন ওবিজেট নয়।

এসকিউএল বিষয়বস্তু এবং পিএইচপি কোডটি পরীক্ষা করে দেখুন এবং পোস্টম্যান (বা অন্য কোনও এপিআই পরীক্ষক) এর সাথে এটি পরীক্ষা করুন


0

আমি যে ভুলটি করছিলাম তা nullJSON.parse () এ গেছে (অজান্তে)।

সুতরাং এটি ছুড়ে ফেলেছে Unexpected token n in JSON at position 0


-24

ব্যবহার eval। এটি জাভাস্ক্রিপ্টের এক্সপ্রেশন / কোডটিকে স্ট্রিং হিসাবে গ্রহণ করে এবং মূল্যায়ন / সম্পাদন করে।

eval(inputString);

ইভাল () এর প্রতিটি অনুরোধ জাভাস্ক্রিপ্ট দোভাষী এর একটি নতুন উদাহরণ তৈরি করে। এটি একটি সংস্থান হগ হতে পারে।
ইয়েকো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.