JSON.stringify এর বিপরীত?


338

আমি যেমন একটি বিষয় স্ট্রিংফাই করছি {'foo': 'bar'}

আমি কীভাবে কোনও বস্তুর কাছে স্ট্রিংটি ফিরিয়ে আনতে পারি?


6
নোট করুন যে {foo: 'bar'}বৈধ JSON নয় (যদিও এটি একটি বৈধ জাভাস্ক্রিপ্ট এক্সপ্রেশন)।
লেমস

2
কেবল JSON.parse চেষ্টা করুন। যদি আপনার ব্রাউজারটির কোনও সমর্থন না থাকে তবে json2.js ব্যবহার করে দেখুন
অনিরুদ্ধ গুপ্ত

10
ছেলেরা আমরা এখানে একটি লোলক্যাট নিয়ে কাজ করছি।
পয়েন্টি

1
আপনার জেএসওএন.পার্স করা উচিত বলে আমার আরও একটি উত্তর (চতুর্থ পড়ুন) যুক্ত করা উচিত ছিল ...
টাইটুয়ান ডি বাইলিউল

33
@ রবডাব্লু, দেখা যাচ্ছে যে আপনার গুগল লিঙ্কটি এই প্রশ্নটিকে শীর্ষ হিট হিসাবে চিহ্নিত করেছে। # আয়রনিক
চেজ ফ্লোরেল

উত্তর:


501

আপনাকে করার প্রয়োজন JSON.parse()পংক্তি।

var str = '{"hello":"world"}';
try {
  var obj = JSON.parse(str); // this is how you parse a string into JSON 
  document.body.innerHTML += obj.hello;
} catch (ex) {
  console.error(ex);
}


8
প্রো টিপ: সর্বদা JSON.parse () চেষ্টা-কাঠামো কাঠামোর মধ্যে রাখুন, পদ্ধতিটি আপনার নোড / জেএস ক্র্যাশ করতে পারে
স্পোক করুন


62

JSON.stringifyএবং JSON.parseপ্রায় ওপোসাইট, এবং "সাধারণত" এই ধরণের জিনিস কাজ করবে:

var obj = ...;
var json = JSON.stringify(obj);  
var obj2 = JSON.parse(json);

যাতে আপত্তি এবং আপত্তি 2 "একই"।

তবে সচেতন হওয়ার কিছু সীমাবদ্ধতা রয়েছে। আপনি সাধারণ জিনিসগুলির সাথে কাজ করছেন বলে প্রায়শই এই বিষয়গুলি গুরুত্ব দেয় না। তবে আমি এই সহায়িকার ফাংশনটি ব্যবহার করে তাদের কয়েকটি এখানে চিত্রিত করব:

function jsonrepack( obj ) { return JSON.parse(JSON.stringify(obj) ); }
  • আপনি কেবলমাত্র ownPropertiesবস্তুটি পাবেন এবং প্রোটোটাইপগুলি হারাবেন:

    var MyClass = function() { this.foo="foo"; } 
    MyClass.prototype = { bar:"bar" }
    
    var o = new MyClass();
    var oo = jsonrepack(o);
    console.log(oo.bar); // undefined
    console.log( oo instanceof MyClass ); // false
  • আপনি পরিচয় হারাবেন:

    var o = {};
    var oo = jsonrepack(o);
    console.log( o === oo ); // false
  • কার্যগুলি টিকে থাকবে না:

    jsonrepack( { f:function(){} } ); // Returns {}
  • তারিখের অবজেক্টগুলি স্ট্রিং হিসাবে শেষ হয়:

    jsonrepack(new Date(1990,2,1)); // Returns '1990-02-01T16:00:00.000Z'
  • অপরিবর্তিত মানগুলি টিকে থাকবে না:

    var v = { x:undefined }
    console.log("x" in v);              // true
    console.log("x" in jsonrepack(v));  // false
  • কোনও toJSONক্রিয়াকলাপ সরবরাহকারী অবজেক্টগুলি সঠিকভাবে আচরণ করতে পারে না।

    x = { f:"foo", toJSON:function(){ return "EGAD"; } }
    jsonrepack(x) // Returns 'EGAD'

আমি নিশ্চিত যে অন্যান্য বিল্ট-ইন টাইপগুলির সাথেও সমস্যা আছে। (এই সমস্তটি নোড.জেএস ব্যবহার করে পরীক্ষা করা হয়েছিল যাতে আপনার পরিবেশের উপর নির্ভর করে আপনি কিছুটা আলাদা আচরণ পেতে পারেন)।

যখন এটি কোন ব্যাপার কখনও কখনও অতিরিক্ত পরামিতি ব্যবহার পরাস্ত করা যাবে JSON.parseএবং JSON.stringify। উদাহরণ স্বরূপ:

function MyClass (v) {
   this.date = new Date(v.year,1,1);
   this.name = "an object";
};

MyClass.prototype.dance = function() {console.log("I'm dancing"); }

var o = new MyClass({year:2010});
var s = JSON.stringify(o);

// Smart unpack function
var o2 = JSON.parse( s, function(k,v){
  if(k==="") { 
     var rv = new MyClass(1990,0,0);
     rv.date = v.date;
     rv.name = v.name;
     return rv
  } else if(k==="date") {
    return new Date( Date.parse(v) );
  } else { return v; } } );

console.log(o);             // { date: <Mon Feb 01 2010 ...>, name: 'an object' }
console.log(o.constructor); // [Function: MyClass]
o.dance();                  // I'm dancing

console.log(o2);            // { date: <Mon Feb 01 2010 ...>, name: 'an object' }
console.log(o2.constructor) // [Function: MyClass]        
o2.dance();                 // I'm dancing

1
প্রতি "জেএসএন হ'ল একটি পাঠ্য বিন্যাস যা সম্পূর্ণ ভাষা স্বাধীন কিন্তু কনভেনশনগুলি ব্যবহার করে যা সি, সি ++, সি #, জাভা, জাভাস্ক্রিপ্ট, পার্ল, পাইথন এবং আরও অনেকগুলি সহ ভাষার সি-পরিবারের প্রোগ্রামারদের সাথে পরিচিত" " । আমার কাছে এটি বলছে যে জেএসএন কেবলমাত্র ভাষা অজ্ঞান সম্পর্কিত ধরণের / ডেটার জন্য ব্যবহার করা উচিত। অতএব, আপনার উদাহরণটি (খুব বৈধ থাকাকালীন) জাভাস্ক্রিপ্টের সাথে সম্পর্কিত হয়ে কেবল JSON এর সাথে সম্পর্কিত এবং এটি JSONP হিসাবে বেশি সংজ্ঞায়িত হওয়া উচিত, এবং সত্য JSON নয় ... আইএমওJSON SPEC
চেজ ফ্লোরেল

এর একটি উদাহরণ হ'ল { bar:"bar" }(আপনার প্রোটোটাইপ থেকে) বৈধ জেএসন হিসাবে বিবেচনা করা হয় না কারণ fooস্ট্রিংয়ের পরিবর্তে পরিবর্তনশীল। বৈধ জসন এর keyএকটি হওয়া দরকার string
চেজ ফ্লোরেল

3
আমি ওপিটি বলেছিলাম যে "আমি একটি জাভাস্ক্রিপ্ট অবজেক্টকে একটি জেএসএন স্ট্রিংয়ে রূপান্তর করেছি এবং এখন আমি এটি আবার রূপান্তর করতে চাই - আমি কীভাবে এটি করব?" অন্যান্য সমস্ত উত্তর কেবল ব্যবহারের কথা বলে JSON.parse। আমি কেবল সতর্ক করছি যে এমন অনেকগুলি কেস রয়েছে যা সঠিকভাবে পরিচালনা করবে না। আপনি যদি খাঁটি আদিম ডেটা (কোনও শ্রেণি, প্রোটোটাইপস) এবং JSON দ্বারা সমর্থিত কেবলমাত্র ডেটাটাইপগুলি ব্যবহার করেন (কোনও তারিখ, এক্সএমএল, এইচটিএমএল ইত্যাদি) তবে আপনি ঠিক আছেন।
মাইকেল অ্যান্ডারসন

জাভাস্ক্রিপ্টেও X = { foo:"bar" }একইরূপ X = { "foo":"bar" }যা X = {}; X.foo = "bar"একই, X={}; X["foo"] = "bar"ফলাফল 4 সমস্ত ক্ষেত্রে একই জিনিস ident এটি উত্পন্ন JSON এর বৈধতার কোনও পার্থক্য করে না।
মাইকেল অ্যান্ডারসন

2
এটি একটি অসামান্য বিস্তৃত উত্তর এবং গ্রহণযোগ্য উত্তর হওয়ার চেয়ে অনেক বেশি যোগ্য। তোমার চমৎকার কাজের জন্য ধন্যবাদ.
স্কুবো

6

http://jsbin.com/tidob/1/edit?js,console,output

নেটিভ জেএসওএন অবজেক্টে দুটি কী পদ্ধতি রয়েছে।

1. JSON.parse()
2. JSON.stringify() 
  1. JSON.parse()পদ্ধতি JSON স্ট্রিংকে পার্স - অর্থাৎ মূল জাভাস্ক্রিপ্ট অবজেক্ট পুনর্গঠনে

    var jsObject = JSON.parse(jsonString);

  2. JSON.stringify () পদ্ধতিটি একটি জাভাস্ক্রিপ্ট অবজেক্ট গ্রহণ করে এবং এর JSON সমতুল্য প্রদান করে।

    var jsonString = JSON.stringify(jsObject);


5

প্রস্তাবিত ব্যবহার করা হয় JSON.parse

আপনি করতে পারেন এমন একটি বিকল্প রয়েছে:

 var myObject = eval('(' + myJSONtext + ')');

জাভাস্ক্রিপ্টে জসন

কেন জাভাস্ক্রিপ্টের Eval ফাংশনটি ব্যবহার করা খারাপ ধারণা?


5

এই সম্পর্কে কি

var parsed = new Function('return ' + stringifiedJSON )();

এটি এর জন্য একটি নিরাপদ বিকল্প eval



-3
$("#save").click(function () {
    debugger
    var xx = [];
    var dd = { "firstname": "", "lastname": "", "address": "" };
    var otable1 = $("#table1").dataTable().fnGetData();

    for (var i = 0; i < otable1.length; i++) {
        dd.firstname = otable1[i][0];
        dd.lastname = otable1[i][1];
        dd.address = otable1[i][2];
        xx.push(dd);
        var dd = { "firstname": "", "lastname": "", "address": "" };
    }
    JSON.stringify(alert(xx));
    $.ajax({

        url: '../Home/save',
        type: 'POST',
        data: JSON.stringify({ u: xx }),
        contentType: 'application/json;',
        dataType: 'json',
        success: function (event) {
            alert(event);
            $("#table2").dataTable().fnDraw();
            location.reload();
        }
    });
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.