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.parseadalah kebalikan dari JSON.stringify.
JSON.stringifydan JSON.parsehampir 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 ownPropertiesobjek 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 ); // falseAnda akan kehilangan identitas:
var o = {};
var oo = jsonrepack(o);
console.log( o === oo ); // falseFungsi 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)); // falseObjek yang menyediakan toJSONfungsi 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.parsedan 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 foomerupakan variabel daripada string. Valid json perlu keymenjadi 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).