jquery json zu string?

79

Anstatt von einer JSON-Zeichenfolge zu gehen und $ .parseJSON zu verwenden, muss ich mein Objekt nehmen und es in einer Variablen als Zeichenfolge speichern, die JSON darstellt.

(Eine Bibliothek, mit der ich es zu tun habe, erwartet einen fehlerhaften JSON-Typ, daher muss ich damit herumspielen, damit er funktioniert.)

Was ist der beste Weg, dies zu tun?

Inkognito
quelle
1
Mögliches Duplikat der Serialisierung an JSON in jQuery
Wolph
Welche Bibliothek erwartet eine fehlerhafte JSON-Zeichenfolge? : /
Marcel Korpel
Stanford JavaScript Cryptography Library gibt fehlerhaftes JSON aus und analysiert es. Der Fehler wird derzeit behoben.
Inkognito

Antworten:

84

Bearbeiten: Sie sollten die Bibliothek json2.js von Douglas Crockford verwenden, anstatt den folgenden Code zu implementieren. Es bietet einige zusätzliche Funktionen und eine bessere / ältere Browserunterstützung.

Holen Sie sich die Datei json2.js unter: https://github.com/douglascrockford/JSON-js


// implement JSON.stringify serialization
JSON.stringify = JSON.stringify || function (obj) {
    var t = typeof (obj);
    if (t != "object" || obj === null) {
        // simple data type
        if (t == "string") obj = '"'+obj+'"';
        return String(obj);
    }
    else {
        // recurse array or object
        var n, v, json = [], arr = (obj && obj.constructor == Array);
        for (n in obj) {
            v = obj[n]; t = typeof(v);
            if (t == "string") v = '"'+v+'"';
            else if (t == "object" && v !== null) v = JSON.stringify(v);
            json.push((arr ? "" : '"' + n + '":') + String(v));
        }
        return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
    }
};

var tmp = {one: 1, two: "2"};
JSON.stringify(tmp); // '{"one":1,"two":"2"}'

Code von: http://www.sitepoint.com/blogs/2009/08/19/javascript-json-serialization/

Inigoesdr
quelle
23
Ich würde die Bibliothek json2.js anstelle dieser Funktion empfehlen , da sie einige Typen nicht richtig behandelt, z. B. Eigenschaften undefined, die Funktionen (die keine gültigen JSON-Werte sind), Boolesche Objekte (z. B. new Boolean(true);) oder NaNdie ersetzt werden sollten mit null, etc ... unterstützt es auch nicht die zusätzlichen optionalen Argumente, die replacerFunktion und die spacesNummer für den Einzug, die im Standard vollständig beschrieben sind .
Christian C. Salvadó
3
Ich denke, vielleicht sollte der json2-Link sein: github.com/douglascrockford/JSON-js/blob/master/json2.js
Fisherwebdev
5
Die meisten Browser haben heutzutage ein natives JSON-Objekt, das Analyse- und Stringifizierungsmethoden enthält. Versuchen JSON.stringify({})Sie also einfach zu sehen, ob Sie "{}"den obigen Code nicht einfügen müssen. Sie können sogar Parameter übergeben, um Schlüssel herauszufiltern oder hübsch zu drucken, z. B. JSON.stringify({a:1,b:2}, null, 2)setzen Sie eine neue Zeile und 2 Leerzeichen vor jede Taste.
AlexChaffee
Für diejenigen, die nach einer modernen Antwort suchen: JSON.stringify (); ist in allen Browsern (Desktop und Mobile) implementiert: developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
Pablo Martinez
38

ich benutze

$.param(jsonObj)

Das bringt mir die Schnur.

Jonathan
quelle
8
Dies schafft jedoch kein JSON (und das war die Frage).
Felix Kling
22
aber dieser kleine Code macht den ganzen Titel der
Fragenanfragen
35

Die meisten Browser haben eine native JSONObjekt in diesen Tagen, die beinhaltet parseund stringifyMethoden. Also versuchen JSON.stringify({})Sie einfach zu sehen, ob Sie bekommen "{}". Sie können sogar Parameter übergeben, um Schlüssel herauszufiltern oder hübsch zu drucken, z. B. JSON.stringify({a:1,b:2}, null, 2)setzen Sie eine neue Zeile und 2 Leerzeichen vor jede Taste.

JSON.stringify({a:1,b:2}, null, 2)

gibt

"{\n  \"a\": 1,\n  \"b\": 2\n}"

welches druckt als

{
  "a": 1,
  "b": 2
}

Verwenden Sie den zweiten Parameter, um einen Teil Ihrer Frage durcheinander zu bringen. Von http://www.javascriptkit.com/jsref/json.shtml :

Der Ersetzerparameter kann entweder eine Funktion oder ein Array von Zeichenfolgen / Zahlen sein. Es durchläuft jedes Mitglied innerhalb des JSON-Objekts, damit Sie entscheiden können, auf welchen Wert jedes Mitglied geändert werden soll. Als Funktion kann es zurückgeben:

  • Eine Zahl, Zeichenfolge oder ein Boolescher Wert, der den ursprünglichen Wert der Eigenschaft durch den zurückgegebenen ersetzt.
  • Ein Objekt, das serialisiert und dann zurückgegeben wird. Objektmethoden oder -funktionen sind nicht zulässig und werden stattdessen entfernt.
  • Null, wodurch die Eigenschaft entfernt wird.

Als Array entsprechen die darin definierten Werte den Namen der Eigenschaften im JSON-Objekt, die bei der Konvertierung in ein JSON-Objekt beibehalten werden sollen.

AlexChaffee
quelle
10

Der beste Weg, den ich gefunden habe, ist die Verwendung von jQuery JSON

David Reynolds
quelle
1
weil es ein jquery Plugin ist und nicht das, was direkt von jquery bereitgestellt wird
Rajat Gupta
@ user01, aber jquery enthält keine Möglichkeit, dies zu tun (zumindest nicht, als ich diese Antwort schrieb, nicht sicher, ob dies jetzt der Fall ist)
David Reynolds
@ DavidReynolds: Ja, natürlich verstehe ich :) Ich habe keine Beleidigung für Sie beabsichtigt, sondern dies nur als Lösung für das Problem kommentiert :)
Rajat Gupta
0

Sie können den JSON in ein Objekt analysieren und dann Ihren fehlerhaften JSON aus dem Ajavscript-Objekt erstellen. Dies ist möglicherweise nicht die beste Leistung.

Wenn Sie ansonsten nur sehr kleine Änderungen an der Zeichenfolge vornehmen müssen, behandeln Sie sie einfach als Zeichenfolge und entstellen Sie sie mit Standard-Javascript.

cofiem
quelle