Jak stworzyć ciąg JSON w 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 );

}

W kodzie podobnym do tego próbuję utworzyć ciąg JSON tylko po to, aby się bawić. To rzuca błąd, ale jeśli umieszczę całe imię i nazwisko, wiek, żonaty w jednym wierszu (wiersz 2), nie ma. Jaki jest problem?

indianwebdevil
źródło
2
Zobacz odpowiedzi stackoverflow.com/questions/3904269/ ...
powtac

Odpowiedzi:

85

JavaScript nie obsługuje ciągów znaków w wielu wierszach.

Będziesz musiał połączyć te:

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

Możesz także użyć literałów szablonów w ES6 i nowszych: ( Zobacz tutaj dokumentację )

var obj = `{
           "name" : "Raj",
           "age" : 32,
           "married" : false,
           }`;
bardiir
źródło
13
Lub umieść \ na końcu każdego wiersza w dosłownym.
Phrogz
3
W przypadku ciągów wielowierszowych zamiast pojedynczych lub podwójnych cudzysłowów możesz użyć `(znak zaznaczenia wstecznego po lewej stronie klawisza # 1). Nazywa się je „literałami szablonów”.
Blue
5
Zdecydowanie: nie zadowalaj się tą odpowiedzią i patrz na innych.
AsTeR
Literały szablonów to ECMA Script 2015 Standard. To pytanie i odpowiedź pochodzą już z 2012 roku. Ale
edytuję
Naprawdę? Łączenie ciągów od zera to najlepszy sposób na zbudowanie JSON? Myślę, że drugą odpowiedzią powinna być odpowiedź zaakceptowana.
rory.ap
265

Sposób, w jaki to robię, to:

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

Myślę, że w ten sposób można zmniejszyć szanse na błędy.

Akhil Sekharan
źródło
62

Funkcja JSON.stringify zamieni twój obiekt json w łańcuch:

var jsonAsString = JSON.stringify(obj);

Jeśli przeglądarka tego nie implementuje (IE6 / IE7), użyj skryptu JSON2.js . Jest bezpieczny, ponieważ używa natywnej implementacji, jeśli istnieje.

Didier Ghys
źródło
23

To może być całkiem łatwe i proste

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.
Ukryty
źródło
13

Zastosowanie JSON.stringify:

> JSON.stringify({ asd: 'bla' });
'{"asd":"bla"}'
TimWolla
źródło
Zobacz też json2.js, jeśli potrzebujesz obsługi starszych przeglądarek.
Douglas
Tak, oto link do jego listy projektów GitHub: github.com/douglascrockford
Douglas
@nepsdotin Douglas z SO to nie Douglas Crockford, „to his GitHub”
TimWolla
Ach, przegapiłem to, nie, nie jestem Crockford!
Douglas
5

Myślę, że ten sposób ci pomoże ...

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
źródło
-6

JSON nie może zawierać znaków końca linii. Trzeba aby to wszystko jedną linię: {"key":"val","key2":"val2",etc....}.

Ale nie generuj samodzielnie ciągów JSON. Jest wiele bibliotek, które robią to za Ciebie, z których największą jest jquery .

Marc B.
źródło
8
JSON może mieć podziały wierszy, ale składnia literału ciągu JavaScript nie.
wewnętrznie w ciągu, tak, ale nie między parami klucz / wartość.
Marc B
1
Myślę, że mylisz składnię literału ciągu JavaScript, która nie może zawierać znaku nowej linii bez zmiany znaczenia ani znaczników JSON. Znaczniki JSON z pewnością mogą zawierać podziały wierszy.
1
... wklej kod ze swojego pytania do jsonlint.com ( oczywiście bez itd.) . Po kliknięciu Weryfikuj, zobaczysz, że faktycznie wstawia znaki nowej linii, gdy ładnie się drukuje.