javascript - form - jquery serializearray




Serialisieren zu JSON in jQuery (8)

Der beste Weg besteht darin, das Polyfill für das JSON-js Objekt einzuschließen.

Wenn Sie jedoch darauf bestehen, eine Methode zum Serialisieren eines Objekts in JSON-Notation ( gültige Werte für JSON ) im jQuery-Namespace zu erstellen, 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);

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 dies in eine Zeichenfolge $.ajax() , die folgendermaßen an $.ajax() wird:

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

Eine Sache, die die obigen Lösungen nicht berücksichtigen, ist, wenn Sie ein Array von Eingängen haben, aber nur ein Wert geliefert wurde.

Zum Beispiel, wenn das Backend ein Array von People erwartet, aber in diesem speziellen Fall handelt es sich nur um eine einzelne Person. Dann mache ich:

<input type="hidden" name="People" value="Joe" />

Dann würde es mit den vorherigen Lösungen zu etwas wie:

{
    "People" : "Joe"
}

Aber es sollte wirklich zu mappen

{
    "People" : [ "Joe" ]
}

Um das zu beheben, sollte die Eingabe wie folgt aussehen:

<input type="hidden" name="People[]" value="Joe" />

Und Sie würden die folgende Funktion verwenden (basierend auf anderen Lösungen, aber ein wenig erweitert)

$.fn.serializeObject = function() {
var o = {};
var a = this.serializeArray();
$.each(a, function() {
    if (this.name.substr(-2) == "[]"){
        this.name = this.name.substr(0, this.name.length - 2);
        o[this.name] = [];
    }

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

Ich jquery-json seit 6 Monaten jquery-json und es funktioniert jquery-json . Es ist sehr einfach zu benutzen:

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

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

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

$.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;
};

Ja, Sie sollten JSON.stringify und JSON.parse Ihre "Json_PostData" vor dem Aufruf von $ .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");

            } 
    });

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.

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



JSON-js - JSON in JavaScript.

Verwenden Sie JSON.stringify um ein Objekt in eine Zeichenfolge zu JSON.stringify :

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

Verwenden Sie JSON.parse um eine JSON-Zeichenfolge in ein Objekt zu JSON.parse :

var your_object = JSON.parse(json_text);

Es wurde kürzlich von John Resig empfohlen:

... Bitte starten Sie die Migration Ihrer JSON-Anwendungen zu Crockfords json2.js. Es ist vollständig kompatibel mit der ECMAScript 5-Spezifikation und wird leicht degradiert, wenn eine native (schnellere!) Implementierung existiert.

In der Tat, ich habe gestern eine Änderung in jQuery gestern, die JSON.parse-Methode verwendet, wenn es existiert, jetzt, nachdem es vollständig angegeben wurde.

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

Neuere Browser unterstützen das JSON-Objekt nativ. Die aktuelle Version der JSON-Bibliothek von Crockford definiert JSON.stringify und JSON.parse nur dann, wenn sie noch nicht definiert sind, sodass die JSON.stringify Implementierung intakt bleibt.





serialization