জাভাস্ক্রিপ্ট কীভাবে JSON অ্যারে পার্স করবেন


97

সার্ভার থেকে একটি JSON বার্তা পেতে আমি সেনচা টাচ (এক্সট্রিজএস) ব্যবহার করছি। আমি যে বার্তাটি পেয়েছি তা হ'ল:

{
"success": true,
"counters": [
    {
        "counter_name": "dsd",
        "counter_type": "sds",
        "counter_unit": "sds"
    },
    {
        "counter_name": "gdg",
        "counter_type": "dfd",
        "counter_unit": "ds"
    },
    {
        "counter_name": "sdsData",
        "counter_type": "sds",
        "counter_unit": "   dd       "
    },
    {
        "counter_name": "Stoc final",
        "counter_type": "number    ",
        "counter_unit": "litri     "
    },
    {
        "counter_name": "Consum GPL",
        "counter_type": "number    ",
        "counter_unit": "litri     "
    },
    {
        "counter_name": "sdg",
        "counter_type": "dfg",
        "counter_unit": "gfgd"
    },
    {
        "counter_name": "dfgd",
        "counter_type": "fgf",
        "counter_unit": "liggtggggri     "
    },
    {
        "counter_name": "fgd",
        "counter_type": "dfg",
        "counter_unit": "kwfgf       "
    },
    {
        "counter_name": "dfg",
        "counter_type": "dfg",
        "counter_unit": "dg"
    },
    {
        "counter_name": "gd",
        "counter_type": "dfg",
        "counter_unit": "dfg"
    }

    ]
}

আমার সমস্যাটি হ'ল আমি এই JSON অবজেক্টটিকে পার্স করতে পারছি না যাতে আমি প্রতিটি কাউন্টার অবজেক্ট ব্যবহার করতে পারি।

আমি এটির মতো সম্পাদন করার চেষ্টা করছি:

var jsonData = Ext.util.JSON.decode(myMessage);
for (var counter in jsonData.counters) {
     console.log(counter.counter_name);
 }

আমি কি ভুল করছি ? ধন্যবাদ!


উত্তর:


145

জাভাস্ক্রিপ্টটিতে স্ট্রিংয়ের জন্য জেএসএন পার্সে একটি বিল্ট রয়েছে, যা আমি মনে করি আপনার কাছে যা রয়েছে:

var myObject = JSON.parse("my json string");

আপনার উদাহরণ সহ এটি ব্যবহার করা হবে:

var jsonData = JSON.parse(myMessage);
for (var i = 0; i < jsonData.counters.length; i++) {
    var counter = jsonData.counters[i];
    console.log(counter.counter_name);
}

এখানে একটি কাজের উদাহরণ

সম্পাদনা : লুপের জন্য আপনার ব্যবহারের ক্ষেত্রে একটি ভুল আছে (আমি এটি আমার প্রথম পড়াতে মিস করেছি, স্পটটির জন্য @ এভার্টের ক্রেডিট)। একটি ইন-লুপ ব্যবহার করে ভ্যারিয়াকে বর্তমান লুপের সম্পত্তি নাম হিসাবে সেট করবে, আসল ডেটা নয়। সঠিক ব্যবহারের জন্য উপরে আমার আপডেট হওয়া লুপটি দেখুন

গুরুত্বপূর্ণ : JSON.parseপদ্ধতিটি পুরানো পুরাতন ব্রাউজারগুলিতে কাজ করবে না - তাই আপনি যদি ইন্টারনেট সংযোগকে নমন করে কিছু সময়ের মাধ্যমে আপনার ওয়েবসাইটটি উপলব্ধ করার পরিকল্পনা করেন তবে এটি সমস্যা হতে পারে! আপনি যদি সত্যিই আগ্রহী হন তবে এখানে একটি সমর্থন চার্ট (যা আমার সমস্ত বাক্সে টিক দেয়)।


4
যদি তিনি এমন একটি লাইব্রেরি ব্যবহার করেন যা ক্রস ব্রাউজার পার্সজেএসএন ফাংশন সমর্থন করে, তবে সেটিকে এটি ব্যবহার করা উচিত। এছাড়াও, আপনি লুপ ভুল পুনরাবৃত্তি।
বার্গি

এটি চালানোর সময় আমি প্রথম লাইনে একটি ত্রুটি পেয়েছি: আনকচড সিনট্যাক্স এরিয়ার: অপ্রত্যাশিত টোকেন ও
রাত

@nights: তা সম্ভবত তারপর আপনি একটি অবৈধ JSON স্ট্রিংকে আছে যে, একটি অনলাইন তাদেরকে JSON বৈধতা টুল, চেষ্টা এই এক মত
musefan

8

এটি আমার উত্তর,

<!DOCTYPE html>
<html>
<body>
<h2>Create Object from JSON String</h2>
<p>
First Name: <span id="fname"></span><br> 
Last Name: <span id="lname"></span><br> 
</p> 
<script>
var txt = '{"employees":[' +
'{"firstName":"John","lastName":"Doe" },' +
'{"firstName":"Anna","lastName":"Smith" },' +
'{"firstName":"Peter","lastName":"Jones" }]}';

//var jsonData = eval ("(" + txt + ")");
var jsonData = JSON.parse(txt);
for (var i = 0; i < jsonData.employees.length; i++) {
    var counter = jsonData.employees[i];
    //console.log(counter.counter_name);
    alert(counter.firstName);
}

</script>
</body>
</html>

6

একটি ইন-লুপে চলমান চলকটি সম্পত্তির নাম ধারণ করে, সম্পত্তির মানটি রাখে না।

for (var counter in jsonData.counters) {
    console.log(jsonData.counters[counter].counter_name);
}

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

for (var i=0; i<jsonData.counters.length; i++) {
    var counter = jsonData.counters[i];
    console.log(counter.counter_name);
}

1

সার্ভার ডেটার সাথে ইন্টারঅ্যাক্ট করার জন্য "সেনচা ওয়ে" একটি Ext.data.Storeদ্বারা প্রক্সাইড সেট করে Ext.data.proxy.Proxy(এই ক্ষেত্রে Ext.data.proxy.Ajax) একটি দিয়ে সজ্জিত Ext.data.reader.Json(জেএসওএন-এনকোডড ডেটার জন্য, অন্যান্য পাঠকও উপলব্ধ রয়েছে)। সার্ভারে ডেটা লেখার জন্য এখানে একটি রয়েছেExt.data.writer.Writer জন্য বিভিন্ন ধরণের বিভিন্ন ধরণের রয়েছে।

এটির মতো একটি সেটআপের উদাহরণ এখানে:

    var store = Ext.create('Ext.data.Store', {
        fields: [
            'counter_name',
            'counter_type',
            'counter_unit'
        ],

        proxy: {
            type: 'ajax',
            url: 'data1.json',

            reader: {
                type: 'json',
                idProperty: 'counter_name',
                rootProperty: 'counters'
            }
        }
    });

data1.jsonএই উদাহরণে ( এই ফিডেলটিতেও উপলব্ধ ) আপনার ডেটা ভারব্যাটিম ধারণ করে। idProperty: 'counter_name'সম্ভবত এই ক্ষেত্রে alচ্ছিক তবে সাধারণত প্রাথমিক কী বৈশিষ্ট্যটি নির্দেশ করে। rootProperty: 'counters'কোন বৈশিষ্ট্যে ডেটা আইটেমগুলির অ্যারে রয়েছে তা নির্দিষ্ট করে।

স্টোর সেটআপের মাধ্যমে আপনি কল করে সার্ভার থেকে ডেটা পুনরায় পড়তে পারবেন store.load()। আপনি কোনও সেন্টা টাচ যথাযথ UI উপাদান যেমন গ্রিড, তালিকাগুলি বা ফর্মগুলিতেও স্টোরটি ওয়্যার করতে পারেন।



0

এটি কবজ মত কাজ করে!

সুতরাং আমি আমার প্রয়োজন অনুসারে কোডটি সম্পাদনা করেছি। এবং এখানে পরিবর্তনগুলি রয়েছে: এটি প্রতিক্রিয়া থেকে পরিবেশের ভেরিয়েবলের আইডি নম্বরটি সংরক্ষণ করবে।

var jsonData = JSON.parse(responseBody);
for (var i = 0; i < jsonData.data.length; i++)
{
    var counter = jsonData.data[i];
    postman.setEnvironmentVariable("schID", counter.id);
}

0

উচ্চতর ভোট সহ উত্তরের একটি ভুল আছে। যখন আমি এটি ব্যবহার করি তখন আমি এটি 3 লাইনে খুঁজে পেতে পারি:

var counter = jsonData.counters[i];

আমি এটিকে পরিবর্তন করেছি:

var counter = jsonData[i].counters;

এবং এটা আমার জন্য কাজ করে। 3 লাইনে অন্যান্য উত্তরগুলির মধ্যে পার্থক্য রয়েছে:

var jsonData = JSON.parse(myMessage);
for (var i = 0; i < jsonData.counters.length; i++) {
    var counter = jsonData[i].counters;
    console.log(counter.counter_name);
}

4
হতে পারে আপনি অর্থ করতে পারেন যেখানে তুমি বলেছিলে উচিত । তবে আপনি যদি আপনার কোডটিতে আরও বিশদ / ব্যাখ্যা যুক্ত করেন তবে এটি আরও ভাল, এটি ওপি এবং একই প্রশ্নযুক্ত অন্যান্য ব্যক্তিকে আরও ভাল সহায়তা করবে help
টিউ

আপনি কেন এই পদ্ধতিটি বেছে নিয়েছিলেন সে সম্পর্কেও আপনি কিছুটা ব্যাখ্যা করতে পারেন যাতে ব্যবহারকারী আরও কিছুটা শিখতে পারে। এটি এই উত্তরটির উন্নতি করতে সহায়তা করবে।
টিএসটাইম 5'19

সর্বাধিক ভোট দিয়ে উত্তরটি এই প্রশ্নের উত্তর দিয়েছে তবে আমি যখন এটি ব্যবহার করি তখন বুঝতে পারি যে এটি লাইন 4-এ ভুল wrong তবে আমি এটিকে পরিবর্তন করেছি: var কাউন্টার = জসনডাটা [i]। কাউন্টার; এবং এটা কাজ করে. সুতরাং আমি বলেছিলাম পরিবর্তে উচিত।
মাহদী জালালী

0

ঠিক যেমন একটি মাথা উপরে ...

var data = JSON.parse(responseBody);

অবচয় করা হয়েছে

পোস্টম্যান লার্নিং সেন্টার এখন পরামর্শ দেয়

var jsonData = pm.response.json();

-1

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

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

যাইহোক, এই উদাহরণগুলি সেনচা টাচের জন্যও রয়েছে (বিশেষত ভি 2), যা এক্সটজে হিসাবে একই মূল ফাংশনের উপর ভিত্তি করে।


-1

আমার ডেটাটি হুবহু মিলেছে কিনা তা নিশ্চিত না তবে আমার কাছে JSON অবজেক্টগুলির অ্যারে ছিল, যা পৃষ্ঠা ব্যবহার করার সময় jQuery ফর্মবিল্ডার থেকে রফতানি হয়েছিল।

আশা করি আমার উত্তরটি যে কেউ আমার প্রশ্নের মতোই সমস্যার উত্তর খুঁজছে এই প্রশ্নের উপর ঝাঁকুনিতে সহায়তা করতে পারে।

ডেটা কিছুটা এরকম দেখাচ্ছে:

var allData = 
[
    [
        {
            "type":"text",
            "label":"Text Field"
        }, 
        {
            "type":"text",
            "label":"Text Field"
        }
    ],
    [
        {
            "type":"text",
            "label":"Text Field"
        }, 
        {
            "type":"text",
            "label":"Text Field"
        }
    ]
]

আমি এটি পার্স করার জন্য যা করেছি তা হ'ল নিম্নলিখিতটি করা:

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