JavaScript'te JSON dizesi nasıl oluşturulur?


97
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 );

}

Bunun gibi bir kodda, sadece etrafta oynamak için JSON dizesi oluşturmaya çalışıyorum. Hata fırlatıyor, ancak tüm adı, yaşı, evli olduğunu tek bir satıra (satır 2) koyarsam olmaz. Sorun ne?


Yanıtlar:


85

Javascript, Dizeleri birden çok satırda işlemez.

Bunları birleştirmeniz gerekecek:

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

Şablon değişmezlerini ES6 ve üzeri sürümlerde de kullanabilirsiniz: ( Belgeler için buraya bakın )

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

13
Veya hazır bilgideki her satırın sonuna bir \ koyun.
Phrogz

3
Çok satırlı dizeler için tek veya çift tırnak yerine `(# 1 tuşunun solundaki geri tik karakteri) kullanabilirsiniz. Bunlara 'şablon değişmezleri' denir.
Blue

5
Kesinlikle: bu cevaba razı olmayın ve diğerlerine bakın.
AsTeR

1
Şablon değişmezleri ECMA Script 2015 Standardıdır. Bu soru ve cevap zaten 2012'den. Ama içinde düzenleyeceğim :)
bardiir

Gerçekten mi? Sıfırdan dize birleştirme JSON oluşturmanın en iyi yolu mu? Diğer cevabın kabul edilen cevap olması gerektiğini düşünüyorum.
rory.ap

270

Bunu yapma şeklim:

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

Sanırım bu yöntem hata olasılığını azaltabilir.


Ağaca derinlik vermek isteseniz kod nasıl görünürdü? İsim için olduğu gibi name.firstname ve name.lastname vermek istiyorum. Adı var olarak tanımlamam gerekir mi?
Amir

62

JSON.stringify işlevi json nesnenizi bir dizeye dönüştürecektir:

var jsonAsString = JSON.stringify(obj);

Tarayıcının bunu uygulamaması durumunda (IE6 / IE7), JSON2.js komut dosyasını kullanın . Varsa yerel uygulamayı kullandığı için güvenlidir.


23

Bu oldukça kolay ve basit olabilir

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.


6

Sanırım bu yol size yardımcı oluyor ...

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);

-6

json dizgelerinde satır sonu olamaz. Sen hepsini bir satır etmesi gerekir: {"key":"val","key2":"val2",etc....}.

Ancak JSON dizelerini kendiniz oluşturmayın. Bunu sizin için yapan, en büyüğü jquery olan birçok kütüphane var .


8
JSON satır sonlarına sahip olabilir, ancak JavaScript dizesi değişmez sözdizimi olamaz.

evet, ancak anahtar / değer çiftleri arasında değil.
Marc B

1
Sanırım, çıkış karaktersiz bir satırsonu karakteri ve JSON işaretlemesi içeremeyen JavaScript dizesi değişmez sözdizimi ile karıştırıyorsunuz. JSON işaretlemesi kesinlikle satır sonları içerebilir.

1
... sorunuzdaki kodu jsonlint.com'a yapıştırın (vb. olmadan tabii ki) . Doğrula'yı tıkladıktan sonra, güzel yazdırıldığında aslında yeni satırlar eklediğini göreceksiniz .
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.