Pertanyaan Dengan aman mengubah string JSON menjadi objek


Dengan memberikan serangkaian data JSON, bagaimana Anda dapat dengan aman mengubah string itu menjadi objek JavaScript?

Tentunya Anda dapat melakukan ini dengan tidak aman dengan sesuatu seperti ...

var obj = eval("(" + json + ')');

... tapi itu membuat kita rentan terhadap string json yang mengandung kode lain, yang tampaknya sangat berbahaya untuk hanya eval.


1126
2017-09-05 00:12


asal


Jawaban:


JSON.parse(jsonString) adalah pendekatan JavaScript murni selama Anda dapat menjamin peramban yang cukup modern.


1699
2018-04-16 11:45



Metode jQuery sekarang tidak lagi digunakan. Gunakan metode ini sebagai gantinya:

let jsonObject = JSON.parse(jsonString);

Jawaban asli menggunakan fungsi jQuery yang tidak lagi digunakan:

Jika Anda menggunakan jQuery, gunakan saja:

jQuery.parseJSON( jsonString );

Ini persis apa yang Anda cari (lihat jQuery dokumentasi).


855
2017-09-02 14:07



Edit: Jawaban ini untuk IE <7, untuk browser modern memeriksa jawaban Jonathan di atas.

Edit: Jawaban ini sudah usang dan Jawaban Jonathan di atas (JSON.parse(jsonString)) sekarang menjadi jawaban Terbaik.

JSON.org memiliki parser JSON untuk banyak bahasa termasuk 4 yang berbeda untuk Javascript. Saya percaya kebanyakan orang akan mempertimbangkannya json2.js implementasi goto mereka.


138
2017-09-05 00:13



Gunakan kode sederhana yang ditunjukkan berikut ini tautan di MSDN.

var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);

dan mundur

var str = JSON.stringify(arr);

61
2017-12-15 23:26



Saya tidak yakin tentang cara lain untuk melakukannya tetapi inilah cara Anda melakukannya Prototipe (tutorial JSON).

new Ajax.Request('/some_url', {
  method:'get',
  requestHeaders: {Accept: 'application/json'},
  onSuccess: function(transport){
    var json = transport.responseText.evalJSON(true);
  }
});

Panggilan evalJSON () dengan benar sebagai argumen membersihkan string yang masuk.


17
2017-09-05 00:13



Sepertinya ini masalahnya:

Input diterima, melalui websocket ajax dll, dan itu selalu akan dalam format String - tetapi Anda perlu tahu apakah itu JSON.parsable. Touble adalah, bahwa jika Anda selalu menjalankannya melalui JSON.parse, program MUNGKIN terus 'berhasil' tetapi Anda masih akan melihat kesalahan yang dilemparkan di konsol dengan "Kesalahan: tak terduga token 'x'" yang ditakuti.

var data;

try {
  data = JSON.parse(jqxhr.responseText);
} catch (_error) {}

data || (data = {
  message: 'Server error, please retry'
});

15
2018-04-29 07:37



Jika Anda menggunakan jQuery, Anda juga bisa melakukannya $.getJSON(url, function(data) { });

Maka Anda dapat melakukan hal-hal seperti data.key1.something, data.key1.something_else, dll.


11
2017-10-24 13:57



$.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});

Callback dilewatkan data yang dikembalikan, yang akan menjadi objek atau larik JavaScript sebagaimana didefinisikan oleh struktur JSON dan diuraikan menggunakan $.parseJSON() metode.


10
2018-05-06 06:23



Hanya untuk bersenang-senang, di sini adalah cara menggunakan fungsi:

 jsonObject = (new Function('return ' + jsonFormatData))()

9
2017-10-15 08:11



Jika Anda ingin metode ini dapat digunakan dengan cara ini. Berikut objek Data yang Anda inginkan ex: Data = '{result: true, count: 1}'

try {
  eval('var obj=' + Data);
  console.log(obj.count);
}
catch(e) {
  console.log(e.message);
}

Metode ini sangat membantu dalam Nodejs Jika Anda bekerja dengan pemrograman port serial


8
2017-07-15 18:53



Cara termudah menggunakan parse() metode:

var response = '{"result":true,"count":1}';
var JsonObject= JSON.parse(response);

maka Anda bisa mendapatkan nilai dari Json elemen, misalnya:

var myResponseResult = JsonObject.result;
var myResponseCount = JsonObject.count;

Menggunakan jQuery seperti yang dijelaskan di dokumentasi:

JSON.parse(jsonString);

6
2018-02-20 01:00