JSON.parse থেকে ব্যতিক্রম ধরার সঠিক উপায়


260

আমি JSON.parseএমন প্রতিক্রিয়া ব্যবহার করছি যা মাঝে মাঝে 404 টি প্রতিক্রিয়া ধারণ করে। যে ক্ষেত্রে এটি 404 ফেরত দেয় সেখানে কোনও ব্যতিক্রম ধরা এবং তার পরে অন্য কোনও কোড কার্যকর করার কোনও উপায় আছে?

data = JSON.parse(response, function (key, value) {
    var type;
    if (value && typeof value === 'object') {
        type = value.type;
        if (typeof type === 'string' && typeof window[type] === 'function') {
            return new(window[type])(value);
        }
    }
    return value;
});

3
404 প্রতিক্রিয়া সম্পর্কিত XMLHttpRequestনয়, JSON.parseনিজেই। আপনি যদি আমাকে কোড সিপেট দেখান, আমি আপনাকে সাহায্য করতে সক্ষম হতে পারি।
মিং-টাং

ডেটা = JSON.parse (প্রতিক্রিয়া, ফাংশন (কী, মান) type ভ্যার টাইপ; যদি (মান && টাইপফুল্য === 'অবজেক্ট') {প্রকার = মান.type; যদি (টাইপফুল টাইপ === 'স্ট্রিং' && টাইপফ উইন্ডো [প্রকার] === 'ফাংশন') new নতুন ফিরে (উইন্ডো [প্রকার]) (মান);}} ফেরতের মান;
প্রস্টক

আমি ইফ্রেমে কিছু পোস্ট করি তারপর
জসন

উত্তর:


419

আমি আইফ্রেমে কিছু পোস্ট করি তারপর জসন পার্সের সাথে আইফ্রেমের সামগ্রীগুলি আবার পড়ি ... তাই কখনও কখনও এটি জসন স্ট্রিং নয়

এটা চেষ্টা কর:

if(response) {
    try {
        a = JSON.parse(response);
    } catch(e) {
        alert(e); // error in the above string (in this case, yes)!
    }
}

12
যদি চেষ্টা ব্লকে আরও বিবৃতি থাকে তবে আপনি e.name == "সিন্ট্যাক্সেরর" দ্বারা ব্যতিক্রমটি শনাক্ত করতে পারবেন, তবে আপনার যদি ওপেন না থাকে provided
ব্যবহারকারী 1158559

1
যদি প্রতিক্রিয়া অপরিজ্ঞাত হয়?
ভিনি

12

আমরা ত্রুটি ও 404 স্থিতি কোড এবং ব্যবহার পরীক্ষা করতে পারি try {} catch (err) {}

আপনি এটি চেষ্টা করতে পারেন:

const req = new XMLHttpRequest();
req.onreadystatechange = function() {
    if (req.status == 404) {
        console.log("404");
        return false;
    }

    if (!(req.readyState == 4 && req.status == 200))
        return false;

    const json = (function(raw) {
        try {
            return JSON.parse(raw);
        } catch (err) {
            return false;
        }
    })(req.responseText);

    if (!json)
        return false;

    document.body.innerHTML = "Your city : " + json.city + "<br>Your isp : " + json.org;
};
req.open("GET", "https://ipapi.co/json/", true);
req.send();

আরও পড়ুন:


5

আমি জাভাস্ক্রিপ্টে মোটামুটি নতুন। তবে এটি আমি বুঝতে পেরেছি: অবৈধ জেএসএনকে তার প্রথম প্যারামিটার হিসাবে সরবরাহ করা হলে ব্যতিক্রমগুলি JSON.parse()ফিরিয়ে দেয় । So. নিম্নলিখিত হিসাবে এই ব্যতিক্রমটি ধরা ভাল হবে:SyntaxError

try {
    let sData = `
        {
            "id": "1",
            "name": "UbuntuGod",
        }
    `;
    console.log(JSON.parse(sData));
} catch (objError) {
    if (objError instanceof SyntaxError) {
        console.error(objError.name);
    } else {
        console.error(objError.message);
    }
}

আমি "প্রথম প্যারামিটার" JSON.parse()শব্দটি গা bold ় করার কারণটি হ'ল এটির দ্বিতীয় প্যারামিটার হিসাবে একটি রিভিভার ফাংশন লাগে।


1
আমি / যদি অন্যথায় আপনার ফাইনাল বুঝতে পারি না। সত্য বা মিথ্যা হলে, একই কোডটি চালিত হয়:console.err(objError);
হোল্ডঅফহ্যাঙ্গার

এটি কেবল আসল ত্রুটির অংশের পরিবর্তে সিনেম্যাক্সেরর নাম হিসাবে সিনেম্যাক্সরর হিসাবে নাম প্রেরণ করে।
তোশিহিকো

2
আরও একটি বিষয়। এটি হওয়া উচিত: console.error()নাconsole.err()
কে.ভান্সেন্ট

-2

আপনি এটি চেষ্টা করতে পারেন:

Promise.resolve(JSON.parse(response)).then(json => {
    response = json ;
}).catch(err => {
    response = response
});

-5

JSON.parse () এর যুক্তিটি JSON অবজেক্টে পার্স করা না গেলে এই প্রতিশ্রুতি সমাধান হবে না।

Promise.resolve(JSON.parse('{"key":"value"}')).then(json => {
    console.log(json);
}).catch(err => {
    console.log(err);
});

2
তবে এটিJSON.parse
রিলাপ্পি

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