Frage Serialisieren zu JSON in jQuery [duplizieren]


Diese Frage hat hier bereits eine Antwort:

Ich muss ein Objekt zu JSON serialisieren. Ich benutze jQuery. Gibt es einen "Standard" Weg dies zu tun?

Meine spezifische Situation: Ich habe ein Array wie folgt definiert:

var countries = new Array();
countries[0] = 'ga';
countries[1] = 'cd';
...

und ich muss daraus eine Saite machen, zu der ich gehen kann $.ajax() so was:

$.ajax({
    type: "POST",
    url: "Concessions.aspx/GetConcessions",
    data: "{'countries':['ga','cd']}",
...

1140
2017-10-10 15:29


Ursprung


Antworten:


JSON-js - JSON in JavaScript.

Um ein Objekt in eine Zeichenkette umzuwandeln, verwenden Sie JSON.stringify:

var json_text = JSON.stringify(your_object, null, 2);

Verwenden Sie zum Konvertieren einer JSON-Zeichenfolge in ein Objekt JSON.parse:

var your_object = JSON.parse(json_text);

Es wurde kürzlich von empfohlen John Resig:

... BITTE migrieren   Ihre JSON-Anwendungen zu   Crockfords json2.js. Es ist voll   kompatibel mit dem ECMAScript 5   Spezifikation und degradiert würdevoll   wenn eine native (schnellere!) Implementierung   existiert.

In der Tat, ich habe gerade eine Änderung in jQuery gestern gelandet, die die nutzt   JSON.parse-Methode, wenn sie jetzt existiert   dass es vollständig spezifiziert wurde.

Ich neige dazu zu vertrauen, was er in Sachen JavaScript sagt :)

Neuere Browser unterstütz die JSON-Objekt nativ. Die aktuelle Version von Crockfords JSON-Bibliothek wird nur definieren JSON.stringify und JSON.parse Wenn sie nicht bereits definiert sind, bleibt die native Implementierung des Browsers erhalten.


1091
2018-05-26 19:22



Ich habe benutzt jquery-json für 6 Monate und es funktioniert super. Es ist sehr einfach zu benutzen:

var myObj = {foo: "bar", "baz": "wockaflockafliz"};
$.toJSON(myObj);

// Result: {"foo":"bar","baz":"wockaflockafliz"}

181
2018-06-01 21:40



Funktioniert auf IE8 +

Keine Notwendigkeit für jQuery, verwenden Sie:

JSON.stringify(countries); 

92
2017-08-29 06:57



Ich habe es nicht benutzt, aber vielleicht möchten Sie es versuchen jQuery-Plugin von Mark Gibson geschrieben 

Es fügt die zwei Funktionen hinzu: $.toJSON(value), $.parseJSON(json_str, [safe]).


43
2017-10-10 15:35



Nein, die Standardmethode zum Serialisieren in JSON besteht darin, eine vorhandene JSON-Serialisierungsbibliothek zu verwenden. Wenn Sie das nicht möchten, müssen Sie Ihre eigenen Serialisierungsmethoden schreiben.

Wenn Sie eine Anleitung dazu benötigen, würde ich vorschlagen, die Quelle einiger verfügbarer Bibliotheken zu untersuchen.

BEARBEITEN: Ich werde nicht herauskommen und sagen, dass das Schreiben Ihrer eigenen Serialisierungsmethoden schlecht ist, aber Sie müssen bedenken, dass, wenn es für Ihre Anwendung wichtig ist, wohlgeformtes JSON zu verwenden, Sie den Overhead von "einer weiteren Abhängigkeit" abwägen müssen. gegen die Möglichkeit, dass Ihre benutzerdefinierten Methoden eines Tages auf einen Fehlerfall stoßen, den Sie nicht erwartet hatten. Ob dieses Risiko akzeptabel ist, ist Ihr Anruf.


34
2017-10-10 15:47



Ich habe das irgendwo gefunden. Kann mich nicht erinnern, wo ... aber wahrscheinlich auf StackOverflow :)

$.fn.serializeObject = function(){
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name]) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};

26
2018-01-02 07:57



Wenn Sie keine externen Bibliotheken verwenden wollen, gibt es .toSource() native JavaScript-Methode, aber es ist nicht perfekt Browser-übergreifend.


10
2017-12-01 21:44



Der beste Weg ist, die Polyfill für JSON Objekt.

Wenn Sie jedoch darauf bestehen, eine Methode zum Serialisieren eines Objekts in JSON-Notation zu erstellen (gültige Werte für JSON) Im jQuery-Namespace können Sie Folgendes tun:

Implementierung

// This is a reference to JSON.stringify and provides a polyfill for old browsers.
// stringify serializes an object, array or primitive value and return it as JSON.
jQuery.stringify = (function ($) {
  var _PRIMITIVE, _OPEN, _CLOSE;
  if (window.JSON && typeof JSON.stringify === "function")
    return JSON.stringify;

  _PRIMITIVE = /string|number|boolean|null/;

  _OPEN = {
    object: "{",
    array: "["
  };

  _CLOSE = {
    object: "}",
    array: "]"
  };

  //actions to execute in each iteration
  function action(key, value) {
    var type = $.type(value),
      prop = "";

    //key is not an array index
    if (typeof key !== "number") {
      prop = '"' + key + '":';
    }
    if (type === "string") {
      prop += '"' + value + '"';
    } else if (_PRIMITIVE.test(type)) {
      prop += value;
    } else if (type === "array" || type === "object") {
      prop += toJson(value, type);
    } else return;
    this.push(prop);
  }

  //iterates over an object or array
  function each(obj, callback, thisArg) {
    for (var key in obj) {
      if (obj instanceof Array) key = +key;
      callback.call(thisArg, key, obj[key]);
    }
  }

  //generates the json
  function toJson(obj, type) {
    var items = [];
    each(obj, action, items);
    return _OPEN[type] + items.join(",") + _CLOSE[type];
  }

  //exported function that generates the json
  return function stringify(obj) {
    if (!arguments.length) return "";
    var type = $.type(obj);
    if (_PRIMITIVE.test(type))
      return (obj === null ? type : obj.toString());
    //obj is array or object
    return toJson(obj, type);
  }
}(jQuery));

Verwendung

var myObject = {
    "0": null,
    "total-items": 10,
    "undefined-prop": void(0),
    sorted: true,
    images: ["bg-menu.png", "bg-body.jpg", [1, 2]],
    position: { //nested object literal
        "x": 40,
        "y": 300,
        offset: [{ top: 23 }]
    },
    onChange: function() { return !0 },
    pattern: /^bg-.+\.(?:png|jpe?g)$/i
};

var json = jQuery.stringify(myObject);
console.log(json);

9
2018-04-11 05:50



Ja, Sie sollten JSON.stringify und JSON.parse Ihre "Json_PostData" vor dem Aufruf von $ .ajax

$ .ajax ({
            url: post_http_site,
            Typ: "POST",
            Daten: JSON.parse (JSON.stringify (Json_PostData)),
            Cache: falsch,
            error: function (xhr, ajaxOptions, geworfenerError) {
                alert ("write json item, Ajax-Fehler!" + xhr.status + "error =" + wratingError + "xhr.responseText =" + xhr.responseText);
            },
            Erfolg: Funktion (Daten) {
                alert ("write json item, Ajax OK");

            }
    });

7
2018-03-24 03:50



Es ist im Grunde 2-Schritt-Prozess:

Zuerst müssen Sie so stringieren

var JSON_VAR = JSON.stringify(OBJECT_NAME, null, 2); 

Danach müssen Sie die Zeichenfolge in Objekt konvertieren

var obj = JSON.parse(JSON_VAR);

7
2018-06-29 13:21