Bagaimana cara membuat string JSON di JavaScript?

96
window.onload = function(){
    var obj = '{
            "name" : "Raj",
            "age"  : 32,
            "married" : false
            }';

    var val = eval('(' + obj + ')');
    alert( "name : " + val.name + "\n" +
           "age  : " + val.age  + "\n" +
           "married : " + val.married );

}

Dalam kode seperti ini, saya mencoba membuat string JSON hanya untuk dimainkan. Itu adalah kesalahan melempar, tetapi jika saya memasukkan semua nama, usia, menikah dalam satu baris (baris 2) tidak. Apa masalahnya?

indianwebdevil.dll
sumber
2
Lihat jawaban ini stackoverflow.com/questions/3904269/…
powtac

Jawaban:

85

Javascript tidak menangani String di beberapa baris.

Anda perlu menggabungkannya:

var obj = '{'
       +'"name" : "Raj",'
       +'"age"  : 32,'
       +'"married" : false'
       +'}';

Anda juga dapat menggunakan literal template di ES6 dan di atasnya: ( Lihat di sini untuk dokumentasi )

var obj = `{
           "name" : "Raj",
           "age" : 32,
           "married" : false,
           }`;
bardiir
sumber
13
Atau letakkan \ di akhir setiap baris secara literal.
Phrogz
3
Untuk string multibaris, sebagai ganti tanda kutip tunggal atau ganda, Anda dapat menggunakan `(karakter centang mundur di sebelah kiri tombol # 1). Ini disebut 'template literals'.
Biru
5
Pasti: jangan puas dengan jawaban ini dan lihat yang lain.
AsTeR
Literal template adalah ECMA Script 2015 Standard. Tanya jawab ini sudah dari tahun 2012. Tapi saya akan mengeditnya di :)
bardiir
Betulkah? Penggabungan string dari awal adalah cara terbaik untuk membangun JSON? Saya pikir jawaban lain harus menjadi jawaban yang diterima.
rory.ap
265

Cara saya melakukannya adalah:

   var obj = new Object();
   obj.name = "Raj";
   obj.age  = 32;
   obj.married = false;
   var jsonString= JSON.stringify(obj);

Saya rasa cara ini bisa mengurangi peluang terjadinya kesalahan.

Akhil Sekharan
sumber
62

Fungsi JSON.stringify akan mengubah objek json Anda menjadi string:

var jsonAsString = JSON.stringify(obj);

Jika browser tidak menerapkannya (IE6 / IE7), gunakan skrip JSON2.js . Aman karena menggunakan implementasi asli jika ada.

Didier Ghys
sumber
23

Ini bisa sangat mudah dan sederhana

var obj = new Object();
obj.name = "Raj";
obj.age = 32;
obj.married = false;

//convert object to json string
var string = JSON.stringify(obj);

//convert string to Json Object
console.log(JSON.parse(string)); // this is your requirement.
Tersembunyi
sumber
13

Penggunaan JSON.stringify:

> JSON.stringify({ asd: 'bla' });
'{"asd":"bla"}'
TimWolla
sumber
Lihat juga json2.js jika Anda perlu mendukung browser lama.
Douglas
Ya, ini tautan ke daftar proyek GitHub-nya: github.com/douglascrockford
Douglas
@nepsdotin Douglas di SO bukan Douglas Crockford, "ke GitHub- nya "
TimWolla
Aah, melewatkan itu, tidak, aku bukan Crockford!
Douglas
5

Saya pikir cara ini membantu Anda ...

var name=[];
var age=[];
name.push('sulfikar');
age.push('24');
var ent={};
for(var i=0;i<name.length;i++)
{
ent.name=name[i];
ent.age=age[i];
}
JSON.Stringify(ent);
SULFIKAR AN
sumber
-6

string json tidak boleh memiliki jeda baris di dalamnya. Anda harus membuat semuanya menjadi satu baris:{"key":"val","key2":"val2",etc....} .

Tapi jangan buat sendiri string JSON. Ada banyak perpustakaan yang melakukannya untuk Anda, yang terbesar adalah jquery .

Marc B
sumber
8
JSON dapat memiliki jeda baris, tetapi sintaks literal string JavaScript tidak bisa.
secara selingan dalam string, ya, tapi tidak di antara pasangan kunci / nilai.
Marc B
1
Saya pikir Anda bingung dengan sintaks literal string JavaScript yang tidak dapat berisi karakter baris baru yang tidak lolos, dan markup JSON. Markup JSON pasti dapat berisi jeda baris.
1
... sisipkan kode dalam pertanyaan Anda ke jsonlint.com (tanpa dll .... tentu saja) . Setelah mengklik Validasi, Anda akan melihat bahwa itu benar-benar menyisipkan baris baru saat dicetak dengan cantik.