Diberikan string data JSON, bagaimana saya bisa dengan aman mengubah string itu menjadi objek JavaScript?
Jelas saya bisa melakukan ini dengan tidak aman dengan sesuatu seperti:
var obj = eval("(" + json + ')');
tapi itu membuat saya rentan terhadap string JSON yang
berisi kode lain, yang tampaknya sangat berbahaya hanya untuk eval.
Jawaban:
JSON.parse(jsonString)
adalah pendekatan JavaScript murni selama Anda dapat menjamin browser yang cukup modern.
Metode jQuery sekarang sudah tidak digunakan lagi. Gunakan metode ini sebagai gantinya:
let jsonObject = JSON.parse(jsonString);
Jawaban asli menggunakan fungsi jQuery yang sudah usang :
Jika Anda menggunakan jQuery cukup gunakan:
jQuery.parseJSON( jsonString );
Persis seperti yang Anda cari (lihat dokumentasi jQuery ).
Jawaban ini untuk IE <7, untuk browser modern periksa jawaban Jonathan di atas.
Jawaban ini sudah usang dan jawaban Jonathan di atas ( JSON.parse(jsonString)
) sekarang adalah jawaban terbaik .
JSON.org
memiliki parser JSON untuk banyak bahasa termasuk empat yang berbeda untuk JavaScript. Saya percaya kebanyakan orang akan mempertimbangkan implementasi goto json2.js mereka.
Gunakan contoh kode sederhana di "
JSON.parse () ":
var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);
dan membalikkannya:
var str = JSON.stringify(arr);
Saya tidak yakin tentang cara lain untuk melakukannya tetapi inilah cara Anda melakukannya di Prototipe
(tutorial JSON) .
new Ajax.Request('/some_url', {
method:'get',
requestHeaders: {Accept: 'application/json'},
onSuccess: function(transport){
var json = transport.responseText.evalJSON(true);
}
});
Memanggil evalJSON()
dengan true sebagai argumen membersihkan string yang masuk.
Ini tampaknya menjadi masalah:
Input yang diterima melalui websocket Ajax dll, dan itu akan dalam format String, tetapi Anda perlu tahu apakah itu JSON.parsable
. Masalahnya adalah, jika Anda selalu menjalankannya JSON.parse
, program MUNGKIN melanjutkan "berhasil" tetapi Anda masih akan melihat kesalahan
dilemparkan di konsol dengan yang ditakuti "Error: unexpected token 'x'"
.
var data;
try {
data = JSON.parse(jqxhr.responseText);
} catch (_error) {}
data || (data = {
message: 'Server error, please retry'
});
Jika Anda menggunakan jQuery , Anda juga dapat menggunakan:
$.getJSON(url, function(data) { });
Maka Anda dapat melakukan hal-hal seperti
data.key1.something
data.key1.something_else
dll.
$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});
Callback meneruskan data
yang dikembalikan, yang akan menjadi objek JavaScript atau array seperti yang didefinisikan oleh struktur JSON dan diuraikan menggunakan $.parseJSON()
metode ini.
Hanya untuk bersenang-senang, berikut ini cara menggunakan suatu fungsi:
jsonObject = (new Function('return ' + jsonFormatData))()
Menggunakan JSON.parse
mungkin merupakan cara terbaik.
Berikut ini contoh
demo langsung .
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);
Cara termudah menggunakan parse()
metode:
var response = '{"result":true,"count":1}';
var JsonObject= JSON.parse(response);
Kemudian Anda bisa mendapatkan nilai elemen JSON, misalnya:
var myResponseResult = JsonObject.result;
var myResponseCount = JsonObject.count;
Menggunakan
jQuery seperti yang dijelaskan dalam jQuery.parseJSON()
dokumentasi:
JSON.parse(jsonString);
Coba gunakan metode dengan objek Data ini. mis .: 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 ketika Anda
bekerja dengan pemrograman port serial
Saya menemukan cara "lebih baik":
Dalam 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'
});
Penguraian JSON selalu menyebalkan. Jika inputnya tidak seperti yang diharapkan, ia melempar kesalahan dan membuat crash apa yang Anda lakukan.
Anda dapat menggunakan fungsi
kecil berikut untuk mengurai input Anda dengan aman. Itu selalu mengubah objek bahkan jika inputnya tidak valid atau sudah menjadi objek yang lebih baik untuk kebanyakan 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 || {};
}
};
JSON.parse(jsonString);
json.parse akan berubah menjadi objek.
Jika kita memiliki string seperti ini:
"{\"status\":1,\"token\":\"65b4352b2dfc4957a09add0ce5714059\"}"
maka kita cukup menggunakan JSON.parse
dua kali
untuk mengonversi string ini menjadi objek JSON:
var sampleString = "{\"status\":1,\"token\":\"65b4352b2dfc4957a09add0ce5714059\"}"
var jsonString= JSON.parse(sampleString)
var jsonObject= JSON.parse(jsonString)
Dan kita dapat mengekstraksi nilai dari objek JSON menggunakan:
// instead of last JSON.parse:
var { status, token } = JSON.parse(jsonString);
Hasilnya adalah:
status = 1 and token = 65b4352b2dfc4957a09add0ce5714059
JSON.parse()
mengubah string JSON apa saja yang diteruskan ke fungsi menjadi objek JSON.
Untuk memahaminya dengan lebih baik, tekan F12untuk membuka "Periksa Elemen" di browser Anda dan pergi 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:
console.log(JSON.parse(response));
Anda akan mendapatkan output sebagai Obyek {result: true, count: 1}
.
Untuk menggunakan Obyek itu, Anda dapat menetapkannya ke variabel, mungkin obj
:
var obj = JSON.parse(response);
Dengan menggunakan obj
dan .
operator dot ( ) Anda dapat mengakses properti dari objek JSON.
Coba jalankan perintah:
console.log(obj.result);
Dokumentasi resmi :
The JSON.parse()
Metode mem-parsing string JSON, membangun
nilai JavaScript atau objek yang dijelaskan oleh string. reviver
Fungsi opsional dapat disediakan untuk melakukan transformasi pada objek yang dihasilkan sebelum dikembalikan.
Sintaksis:
JSON.parse(text[, reviver])
Parameter:
text
: String yang diurai sebagai JSON. Lihat objek JSON untuk deskripsi sintaks JSON.
reviver (optional)
: Jika suatu fungsi, ini menentukan bagaimana nilai yang awalnya dihasilkan oleh parsing ditransformasikan, sebelum dikembalikan.
Nilai
pengembalian
Objek yang sesuai dengan teks JSON yang diberikan.
Pengecualian
Melempar pengecualian SyntaxError jika string untuk mem-parse tidak valid JSON.
Mengubah objek ke JSON, dan kemudian menguraikannya, bekerja untuk saya, seperti:
JSON.parse(JSON.stringify(object))
Pisahkan string JSON dengan JSON.parse()
, dan data
menjadi objek JavaScript:
JSON.parse(jsonString)
Di sini, JSON mewakili untuk memproses dataset JSON.
Bayangkan kami menerima teks ini dari server web:
'{ "name":"John", "age":30, "city":"New York"}'
Untuk menguraikan objek JSON:
var obj = JSON.parse('{ "name":"John", "age":30, "city":"New York"}');
Berikut obj
adalah objek JSON masing-masing yang terlihat seperti:
{ "name":"John", "age":30, "city":"New York"}
Untuk mengambil nilai, gunakan .
operator:
obj.name // John
obj.age //30
Konversi objek JavaScript menjadi string dengan JSON.stringify()
.
Hanya untuk
pengurai sampul untuk berbagai jenis input
Mengurai data dengan JSON.parse (), dan data menjadi objek JavaScript.
var obj = JSON.parse('{ "name":"John", "age":30, "city":"New York"}');
Saat menggunakan JSON.parse () pada JSON yang berasal dari array, metode akan mengembalikan array JavaScript, bukan objek JavaScript.
var myArr = JSON.parse(this.responseText);
console.log(myArr[0]);
Objek tanggal tidak diizinkan di JSON. Untuk Dates lakukan hal seperti ini
var text = '{ "name":"John", "birth":"1986-12-14", "city":"New York"}';
var obj = JSON.parse(text);
obj.birth = new Date(obj.birth);
Fungsi tidak diizinkan di JSON. Jika Anda perlu memasukkan fungsi, tulis sebagai string.
var text = '{ "name":"John", "age":"function () {return 30;}", "city":"New York"}';
var obj = JSON.parse(text);
obj.age = eval("(" + obj.age + ")");
Pertanyaan yang lebih lama, saya tahu, namun tidak ada yang memperhatikan solusi ini dengan menggunakan new Function()
, fungsi anonim yang mengembalikan data.
Contoh saja:
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 sedikit lebih aman karena dijalankan di dalam suatu fungsi dan tidak dikompilasi dalam kode Anda secara langsung. Jadi jika ada deklarasi fungsi di dalamnya, itu tidak akan terikat ke objek jendela default.
Saya menggunakan ini untuk 'mengkompilasi' pengaturan
konfigurasi elemen DOM (misalnya atribut data) sederhana dan cepat.
Ringkasan:
Javascript (baik browser dan NodeJS) memiliki objek bawaan JSON
. Pada Obyek ini ada 2 metode yang mudah untuk berurusan dengan JSON
. Mereka adalah sebagai berikut:
JSON.parse()
Dibawa JSON
sebagai argumen, mengembalikan objek JSJSON.stringify()
Mengambil objek JS sebagai argumen mengembalikan JSON
objek
Aplikasi lain:
Selain itu untuk sangat nyaman berhadapan dengan JSON
mereka dapat digunakan untuk cara lain. Kombinasi kedua JSON
metode ini memungkinkan kita untuk membuat klon array atau objek yang sangat mudah. Sebagai contoh:
let arr1 = [1, 2, [3 ,4]];
let newArr = arr1.slice();
arr1[2][0] = 'changed';
console.log(newArr); // not a deep clone
let arr2 = [1, 2, [3 ,4]];
let newArrDeepclone = JSON.parse(JSON.stringify(arr2));
arr2[2][0] = 'changed';
console.log(newArrDeepclone); // A deep clone, values unchanged
Anda juga dapat menggunakan reviver
fungsi untuk memfilter.
var data = JSON.parse(jsonString, function reviver(key, value) {
//your code here to filter
});
Untuk informasi
lebih lanjut, baca JSON.parse
.
JSON.parse adalah cara yang tepat untuk mengubah string menjadi objek tetapi jika string yang diuraikan bukan objek atau jika string tidak benar maka akan menimbulkan kesalahan yang akan menyebabkan sisa kode rusak sehingga
ideal untuk membungkus fungsi JSON.parse di dalam try-catch like
try{
let obj = JSON.parse(string);
}catch(err){
console.log(err);
}
Coba ini. Yang ini ditulis dalam naskah.
export function safeJsonParse(str: string) {
try {
return JSON.parse(str);
} catch (e) {
return str;
}
}
/**
* Safely turning a JSON string into an object
*
* @param {String} str - JSON String
* @returns deserialized object, false if error
*/
export function jsonParse(str) {
let data = null;
try {
data = JSON.parse(str);
} catch (err) {
return false;
}
return data;
}
Apa fungsi JSON Parse?
JSON.parse() mengambil string JSON dan mengubahnya menjadi objek JavaScript. JSON.stringify() mengambil objek JavaScript dan mengubahnya menjadi string JSON.
Apa itu JSON JS?
JSON (JavaScript Object Notation) adalah format pertukaran data yang ringan, mudah dibaca dan ditulis oleh manusia, serta mudah diterjemahkan dan dibuat (generate) oleh komputer. Format ini dibuat berdasarkan bagian dari Bahasa Pemprograman JavaScript, Standar ECMA-262 Edisi ke-3 - Desember 1999.
Apa itu JSON dan contohnya?
JSON (dilafalkan "Jason"), singkatan dari JavaScript Object Notation (bahasa Indonesia: notasi objek JavaScript), adalah suatu format ringkas pertukaran data komputer. Formatnya berbasis teks dan terbaca-manusia serta digunakan untuk merepresentasikan struktur data sederhana dan larik asosiatif (disebut objek).
Untuk apa JSON digunakan khususnya pada pemrograman Android?
– JSON sebagai format untuk bertukar data client dan server atau antar aplikasi. Contoh: RESTful API; – JSON sebagai tempat menyimpan data, contoh: Database Mongodb; – JSON digunakan untuk menyimpan konfigurasi project, contoh: file composer.