1233 Stimmen

Serialisierung zu JSON in jQuery

Ich muss serialisieren ein Objekt zu JSON . Ich benutze jQuery . Gibt es eine "Standard"-Methode, um dies zu tun?

Meine besondere Situation: Ich habe ein Array definiert, wie unten gezeigt:

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

und ich muss dies in eine Zeichenkette umwandeln, die ich an $.ajax() wie diese:

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

30voto

jmort253 Punkte 33083

Ich habe dies irgendwo gefunden. Kann mich aber nicht erinnern, wo... 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;
};

11voto

Kain Haart Punkte 139

Wenn Sie keine externen Bibliotheken verwenden möchten, gibt es .toSource() native JavaScript-Methode, aber sie ist nicht perfekt browserübergreifend.

11voto

bruce Punkte 1118

Ja, Sie sollten JSON.stringify y JSON.parse Ihr Json_PostData vor dem Aufruf $.ajax :

$.ajax({
        url:    post_http_site,  
        type: "POST",         
        data:   JSON.parse(JSON.stringify(Json_PostData)),       
        cache: false,
        error: function (xhr, ajaxOptions, thrownError) {
            alert(" write json item, Ajax error! " + xhr.status + " error =" + thrownError + " xhr.responseText = " + xhr.responseText );    
        },
        success: function (data) {
            alert("write json item, Ajax  OK");

        } 
});

10voto

jherax Punkte 5128

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

Wenn Sie jedoch darauf bestehen, eine Methode zur Serialisierung eines Objekts in JSON-Notation zu erstellen ( gültige Werte für JSON ) innerhalb des jQuery-Namensraums können Sie etwa so vorgehen:

Umsetzung

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

10voto

Es ist im Grunde ein 2-stufiger Prozess:

Zunächst müssen Sie wie folgt stringifizieren:

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

Danach müssen Sie die string a Object :

var obj = JSON.parse(JSON_VAR);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X