Saya mencari-cari objek seperti {'foo': 'bar'}
Bagaimana saya bisa mengembalikan string ke objek?
Saya mencari-cari objek seperti {'foo': 'bar'}
Bagaimana saya bisa mengembalikan string ke objek?
Jawaban:
Anda perlu JSON.parse()
string.
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);
}
JSON.parse
adalah kebalikan dari JSON.stringify
.
JSON.stringify
dan JSON.parse
hampir oposite, dan "biasanya" hal semacam ini akan berhasil:
var obj = ...;
var json = JSON.stringify(obj);
var obj2 = JSON.parse(json);
sehingga obj dan obj2 adalah "sama".
Namun ada beberapa batasan yang harus diperhatikan. Seringkali masalah ini tidak masalah karena Anda berurusan dengan objek sederhana. Tapi saya akan menggambarkan beberapa dari mereka di sini, menggunakan fungsi pembantu ini:
function jsonrepack( obj ) { return JSON.parse(JSON.stringify(obj) ); }
Anda hanya akan mendapatkan ownProperties
objek dan kehilangan prototipe:
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
Anda akan kehilangan identitas:
var o = {};
var oo = jsonrepack(o);
console.log( o === oo ); // false
Fungsi tidak bertahan:
jsonrepack( { f:function(){} } ); // Returns {}
Objek tanggal berakhir sebagai string:
jsonrepack(new Date(1990,2,1)); // Returns '1990-02-01T16:00:00.000Z'
Nilai yang tidak terdefinisi tidak bertahan:
var v = { x:undefined }
console.log("x" in v); // true
console.log("x" in jsonrepack(v)); // false
Objek yang menyediakan toJSON
fungsi mungkin tidak berperilaku benar.
x = { f:"foo", toJSON:function(){ return "EGAD"; } }
jsonrepack(x) // Returns 'EGAD'
Saya yakin ada masalah dengan tipe bawaan lain juga. (Semua ini diuji menggunakan node.js sehingga Anda mungkin mendapatkan perilaku yang sedikit berbeda tergantung pada lingkungan Anda juga).
Ketika itu penting kadang-kadang dapat diatasi dengan menggunakan parameter tambahan JSON.parse
dan JSON.stringify
. Sebagai contoh:
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
JSON SPEC
{ bar:"bar" }
(dari prototipe Anda) tidak dianggap json valid karena foo
merupakan variabel daripada string. Valid json perlu key
menjadi string
.
JSON.parse
. Saya hanya memperingatkan bahwa ada banyak kasus yang tidak akan ditangani dengan benar. Jika Anda menggunakan data primitif murni (tanpa kelas, prototipe) dan hanya tipe data yang didukung oleh JSON (tanpa tanggal, XML, HTML, dll.) Maka Anda OK.
X = { foo:"bar" }
sama dengan X = { "foo":"bar" }
yang sama dengan X = {}; X.foo = "bar"
yang sama dengan X={}; X["foo"] = "bar"
objek yang dihasilkan identik dalam semua 4 kasus. Itu tidak ada bedanya dengan validitas JSON yang dihasilkan.
http://jsbin.com/tidob/1/edit?js,console,output
Objek JSON asli mencakup dua metode utama.
1. JSON.parse()
2. JSON.stringify()
The JSON.parse()
Metode mem-parsing string JSON - yaitu merekonstruksi objek JavaScript asli
var jsObject = JSON.parse(jsonString);
Metode JSON.stringify () menerima objek JavaScript dan mengembalikan setara JSON-nya.
var jsonString = JSON.stringify(jsObject);
Disarankan untuk digunakan JSON.parse
Ada alternatif yang bisa Anda lakukan:
var myObject = eval('(' + myJSONtext + ')');
Mengapa menggunakan fungsi JavaScript JavaScript ide yang buruk?
Bagaimana dengan ini
var parsed = new Function('return ' + stringifiedJSON )();
Ini adalah alternatif yang lebih aman untuk eval
.
Lihat ini.
http://jsfiddle.net/LD55x/
Kode:
var myobj = {};
myobj.name="javascriptisawesome";
myobj.age=25;
myobj.mobile=123456789;
debugger;
var str = JSON.stringify(myobj);
alert(str);
var obj = JSON.parse(str);
alert(obj);
$("#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();
}
});
});
{foo: 'bar'}
itu bukan JSON yang valid (sementara itu adalah ekspresi javascript yang valid).