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?


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,
           }`;

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.


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.


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.


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

-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 .


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.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.