Aman mengubah string JSON ke object

Diberikan sebuah string JSON data, bagaimana anda dapat dengan aman mengubah string menjadi objek JavaScript?

Jelas anda dapat melakukan hal ini tidak aman dengan sesuatu seperti...

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

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

Mengomentari pertanyaan (4)
Larutan

JSON.mengurai(jsonString) adalah murni JavaScript pendekatan asalkan anda dapat menjamin cukup browser modern.

Komentar (11)

JQuery metode ini sekarang sudah ditinggalkan. Menggunakan metode ini sebagai gantinya:

let jsonObject = JSON.parse(jsonString);

Jawaban asli menggunakan usang fungsi jQuery:

Jika anda're menggunakan jQuery hanya menggunakan:

jQuery.parseJSON( jsonString );

It's apa yang anda'kembali mencari (lihat jQuery dokumentasi).

Komentar (3)

Edit: Ini jawaban untuk IE < 7, untuk browser modern check Jonathan's jawaban di atas.

Edit: Ini jawaban yang sudah usang dan Jonathan's jawaban atas (JSON.mengurai(jsonString)) sekarang jawaban terbaik.

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

Komentar (3)

Menggunakan kode sederhana yang diwakili berikut ini link di MSDN.

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

dan sebaliknya

var str = JSON.stringify(arr);
Komentar (0)

I'm tidak yakin tentang cara-cara lain untuk melakukan itu, tapi di sini's bagaimana anda melakukannya di Prototipe (JSON tutorial).

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

Menelepon evalJSON() dengan benar sebagai argumen sanitizes masuk string.

Komentar (0)

Hal ini tampaknya menjadi masalah:

Masukan diterima, melalui ajax websocket dll, dan itu selalu akan berada dalam format String - tapi anda perlu tahu jika itu adalah JSON.dapat diuraikan. Touble adalah, bahwa jika anda selalu berjalan melalui JSON.mengurai, program ini DAPAT terus 'berhasil' tapi anda'll masih melihat pesan kesalahan yang dilemparkan di konsol dengan ditakuti "Kesalahan: unexpected token 'x',".

var data;

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

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

Jika anda're menggunakan jQuery, anda bisa juga hanya melakukan $.getJSON(url, function(data) { });

Kemudian anda dapat melakukan hal-hal seperti data.key1.sesuatu, data.key1.something_else, dll.

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

Callback dilewatkan kembali data, yang akan menjadi JavaScript object atau array seperti yang didefinisikan oleh struktur JSON dan parsing menggunakan $.parseJSON() metode.

Komentar (0)

Hanya untuk bersenang-senang, berikut adalah cara menggunakan fungsi :

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

Cobalah menggunakan metode ini objek Data. ex:Data=&#39;{hasil:benar,count:1}'

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

Metode ini benar-benar membantu dalam Nodejs ketika anda bekerja dengan serial port programming

Komentar (4)

Cara termudah menggunakan mengurai() metode:

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

kemudian anda bisa mendapatkan nilai-nilai dari Json elemen, misalnya:

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

Menggunakan jQuery seperti yang dijelaskan dalam dokumentasi:

JSON.parse(jsonString);
Komentar (0)

Menggunakan JSON.mengurai mungkin adalah cara terbaik. Berikut ini's contoh live demo

var jsonRes = '{ "students" : [' +
          '{ "firstName":"Michel" , "lastName":"John" ,"age":18},' +
          '{ "firstName":"Richard" , "lastName":"Joe","age":20 },' +
          '{ "firstName":"James" , "lastName":"Henry","age":15 } ]}';
var studentObject = JSON.parse(jsonRes);
Komentar (0)

Saya menemukan "baik" dengan cara:

Di CoffeeScript:

try data = JSON.parse(jqxhr.responseText)
data ||= { message: 'Server error, please retry' }

Dalam Javascript:

var data;

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

data || (data = {
  message: 'Server error, please retry'
});
Komentar (0)
JSON.parse(jsonString);

json.mengurai akan berubah menjadi objek.

Komentar (0)

JSON parsing selalu sakit di pantat. Jika input tidak sesuai dengan yang diharapkan itu melempar kesalahan dan crash apa yang anda lakukan. Anda dapat menggunakan berikut kecil fungsi untuk aman mengurai masukan anda. Itu selalu berubah objek bahkan jika input tidak valid atau sudah objek yang lebih baik untuk sebagian besar kasus.

JSON.safeParse = function (input, def) {
  // Convert null to empty object
  if (!input) {
    return def || {};
  } else if (Object.prototype.toString.call(input) === '[object Object]') {
    return input;
  }
  try {
    return JSON.parse(input);
  } catch (e) {
    return def || {};
  }
};
Komentar (7)

Mengkonversi objek ke JSON, dan kemudian parsing itu, bekerja untuk saya, seperti:

JSON.parse(JSON.stringify(object))
Komentar (1)

Jika kita memiliki sebuah string seperti ini: "{\"status\":1,\"token\":\"65b4352b2dfc4957a09add0ce5714059\"}" maka kita hanya dapat menggunakan JSON.mengurai dua kali untuk mengkonversi string ini untuk objek JSON:

var sampleString = "{\"status\":1,\"token\":\"65b4352b2dfc4957a09add0ce5714059\"}"
var jsonString= JSON.parse(sampleString)
var jsonObject= JSON.parse(jsonString)

Dan hanya kita dapat mengekstrak nilai dari objek JSON menggunakan:

    // instead of last JSON.parse:
    var { status, token } = JSON.parse(jsonString);

Hasilnya akan menjadi:

status = 1 and token = 65b4352b2dfc4957a09add0ce5714059
Komentar (0)

JSON.parse() mengkonversi setiap String JSON dilewatkan ke dalam fungsi, untuk Objek JSON.

Untuk pemahaman yang lebih Baik tekan F12 untuk membuka Memeriksa Elemen dari browser anda dan masuk ke konsol untuk menulis perintah berikut : -

var response = '{"result":true,"count":1}'; //sample json object(string form)
JSON.parse(response); //converts passed string to JSON Object.

Sekarang jalankan perintah berikut :-

console.log(JSON.parse(response));

anda'akan mendapatkan output sebagai Objek {hasil: benar, count: 1}.

Dalam rangka untuk menggunakan Benda itu, anda dapat menetapkan variabel let's mengatakan obj :-

var obj = JSON.parse(response);

Sekarang dengan menggunakan obj dan dot(.) operator anda dapat mengakses properti dari Objek JSON.

Cobalah untuk menjalankan perintah

console.log(obj.result);
Komentar (0)

Secara resmi didokumentasikan:

The JSON.parse() metode parsing JSON string, membangun JavaScript nilai atau objek yang dijelaskan oleh string. Opsional minuman keras fungsi dapat diberikan untuk melakukan transformasi pada objek yang dihasilkan sebelum dikembalikan.

Sintaks

JSON.parse(text[, reviver])

Parameter

teks

String untuk mengurai sebagai JSON. Melihat objek JSON untuk keterangan JSON sintaks.

minuman keras (opsional)

Jika fungsi ini mengatur berapa nilai awalnya diproduksi oleh parsing berubah, sebelum dikembalikan.

Nilai kembali

Objek yang sesuai untuk diberikan JSON teks.

Pengecualian

Melempar SyntaxError terkecuali jika string untuk mengurai ini tidak berlaku JSON.

Komentar (0)

Tua pertanyaan, saya tahu, namun tidak ada pemberitahuan larutan ini dengan menggunakan Fungsi baru(), fungsi anonim yang menghasilkan data.


Hanya sebuah contoh:

 var oData = 'test1:"This is my object",test2:"This is my object"';

 if( typeof oData !== 'object' )
  try {
   oData = (new Function('return {'+oData+'};'))();
  }
  catch(e) { oData=false; }

 if( typeof oData !== 'object' )
  { alert( 'Error in code' ); }
 else {
        alert( oData.test1 );
        alert( oData.test2 );
      }

Ini adalah sedikit lebih aman karena mengeksekusi dalam fungsi dan tidak mengkompilasi kode anda secara langsung. Jadi jika ada deklarasi fungsi di dalamnya, itu tidak akan terikat pada jendela default objek.

Saya menggunakan ini untuk 'menyusun' pengaturan konfigurasi dari elemen DOM (misalnya data atribut) yang sederhana dan cepat.

Komentar (0)