Wie erstelle ich eine JSON-Zeichenfolge in JavaScript?

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

}

In einem Code wie diesem versuche ich, eine JSON-Zeichenfolge zu erstellen, um herumzuspielen. Es ist ein Fehler, aber wenn ich den Namen, das Alter und die Ehe in eine einzige Zeile (Zeile 2) schreibe, ist dies nicht der Fall. Was ist das Problem?

indianwebdevil
quelle
2
Siehe diese Antworten stackoverflow.com/questions/3904269/…
powtac

Antworten:

84

Javascript verarbeitet Strings nicht über mehrere Zeilen.

Sie müssen diese verketten:

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

Sie können auch Vorlagenliterale in ES6 und höher verwenden: ( Dokumentation finden Sie hier )

var obj = `{
           "name" : "Raj",
           "age" : 32,
           "married" : false,
           }`;
Bardiir
quelle
13
Oder setzen Sie ein \ am Ende jeder Zeile in das Literal.
Phrogz
3
Für mehrzeilige Zeichenfolgen können Sie anstelle von einfachen oder doppelten Anführungszeichen `(Back-Tick-Zeichen links neben der Taste Nr. 1) verwenden. Diese werden als "Vorlagenliterale" bezeichnet.
Blau
5
Auf jeden Fall: Geben Sie sich nicht mit dieser Antwort zufrieden und schauen Sie auf die anderen.
AsTeR
Vorlagenliterale sind ECMA Script 2015 Standard. Diese Frage und Antwort stammt bereits aus dem Jahr 2012. Aber ich werde es in bearbeiten :)
Bardiir
"Ja wirklich?" String-Verkettung von Grund auf ist der beste Weg, um JSON zu erstellen? Ich denke, die andere Antwort sollte die akzeptierte Antwort sein.
rory.ap
262

So wie ich es mache ist:

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

Ich denke, dieser Weg kann die Fehlerwahrscheinlichkeit verringern.

Akhil Sekharan
quelle
62

Die Funktion JSON.stringify verwandelt Ihr JSON-Objekt in eine Zeichenfolge:

var jsonAsString = JSON.stringify(obj);

Falls der Browser dies nicht implementiert (IE6 / IE7), verwenden Sie das Skript JSON2.js . Es ist sicher, da es die native Implementierung verwendet, falls vorhanden.

Didier Ghys
quelle
23

Dies kann ziemlich einfach und unkompliziert sein

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.
Versteckt
quelle
13

Verwendung JSON.stringify:

> JSON.stringify({ asd: 'bla' });
'{"asd":"bla"}'
TimWolla
quelle
Siehe auch json2.js, wenn Sie ältere Browser unterstützen müssen.
Douglas
Ja, hier ist ein Link zu seiner GitHub-Projektliste: github.com/douglascrockford
Douglas
@nepsdotin Douglas bei SO ist nicht Douglas Crockford, "zu seinem GitHub"
TimWolla
Aah, habe das verpasst, nein, ich bin nicht Crockford!
Douglas
5

Ich denke, dieser Weg hilft dir ...

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
quelle
-6

JSON-Zeichenfolgen dürfen keine Zeilenumbrüche enthalten. Sie müssten alles in einer Zeile machen : {"key":"val","key2":"val2",etc....}.

Generieren Sie JSON-Zeichenfolgen jedoch nicht selbst. Es gibt viele Bibliotheken, die das für Sie erledigen, von denen die größte jquery ist .

Marc B.
quelle
8
JSON kann Zeilenumbrüche enthalten, die JavaScript-String-Literal-Syntax jedoch nicht.
intern innerhalb eines Strings, ja, aber nicht zwischen Schlüssel / Wert-Paaren.
Marc B
1
Ich denke, Sie verwechseln die Literal-Syntax von JavaScript-Zeichenfolgen, die kein uneingeschränktes Zeilenumbruchzeichen und JSON-Markup enthalten darf. JSON-Markup kann mit Sicherheit Zeilenumbrüche enthalten.
1
... fügen Sie den Code in Ihrer Frage in jsonlint.com ein ( natürlich ohne das etc ....) . Nach dem Bestätigen klicken, werden Sie sehen , dass es tatsächlich fügt neue Zeilen , wenn es ziemlich Abdrücken.