En la secuencia jQuery en el JSON [repetir]

Esta traducción de: Serialización a JSON en jQuery [Duplicar]

Esta pregunta ya tiene una respuesta aquí: El problema aquí tiene la respuesta:

Necesidad de la que la serializar un objeto a JSON . Necesito un objeto es serializado a JSON . 'M a usar el I jQuery . Estoy usando jQuery . ¿Hay una manera "estándar" para hacer esto? ¿Hay una manera "estándar" de hacer esto?

Mi situación específica: Tengo una matriz definida como se muestra a continuación: circunstancias específicas I: He una serie definida de la siguiente manera:

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

Gire el esta necesidad de la I y en una cadena para pasar al $.ajax()igual que el siguiente: Necesito convertir en una cadena que se pasa a $.ajax()la siguiente:

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

# 1 planta

Referencia: https://stackoom.com/question/nur/ en jQuery repetir secuencia en JSON-


Casa # 2

Si no desea utilizar una biblioteca externa, hay .toSource()métodos JavaScript nativos, pero no es totalmente multi-navegador.


Casa # 3

Pero lo que solía no tienen la han Puede ser que usted desee el intento en el plugin de jQuery escrito por Mark Gibson no hice uso de ella, pero es posible que desee probar escrito por Mark Gibson 's plugin de jQuery

Funciones en La Suma dos de TI: $.toJSON(value), $.parseJSON(json_str, [safe]). Se añade dos $.toJSON(value)funciones: $.parseJSON(json_str, [safe]),.


# 4 piso

No, la forma estándar de serialización de JSON es utilizar una biblioteca de serialización JSON existente. No, serializado como JSON método estándar es el uso de una biblioteca de serialización JSON existente. Si no desea hacer esto , entonces usted va a tener que escribir sus propios métodos de serialización. Si no desea hacerlo, tendrá que escribir sus propios métodos de serialización.

Si desea orientación sobre cómo hacer esto, me gustaría sugerir que examina el origen de algunas de las bibliotecas disponibles. Si necesita instrucciones sobre cómo hacer esto, le sugiero que consulte la fuente de algunas de las bibliotecas disponibles.

EDIT: el que no voy a salir y decir que la escritura de sus propios métodos serliazation es malo, pero que el es necesario que el Tengamos en cuenta que si es importante para su aplicación que utilizar el Formada-Bueno JSON, el entonces usted tiene que sopesar a la sobrecarga de "One More dependencia "en contra de la posibilidad de que sus personalizados . métodos algún día encontrarse con un caso de fallo de que no había previsto editar: no voy a decir a su propio método serliazation es malo, pero hay que tener en cuenta si la aplicación utiliza el formato buena JSON es importante, entonces usted tiene que sopesar "una dependencia" en contra de sus métodos personalizados puede un día encuentro que no previeron la posibilidad de fallas. Si ese riesgo es aceptable es su llamada . El teléfono puede aceptar este riesgo.


Casa # 5

Una cosa que las soluciones anteriores no tienen en cuenta es si usted tiene una gran variedad de entradas, pero se suministró un solo valor. Soluciones anteriores no tener en cuenta una cosa, si usted tiene una matriz de entrada, pero sólo proporciona una valor.

Por ejemplo, si la parte final espera una gran variedad de personas, pero en este caso en particular, se le acaba tratando con una sola persona. Por ejemplo, si el servidor requiere un conjunto de personas, pero en este caso particular, sólo tendrá que hacer frente a una persona. A continuación, haciendo: Luego hacer:

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

Luego, con las soluciones anteriores, sería simplemente asignar a algo así como: a continuación, utilizar la solución anterior, sólo se asignará a la siguiente:

{
    "People" : "Joe"
}

Pero realmente debería asignar a pero realmente debería estar asignada a

{
    "People" : [ "Joe" ]
}

Para solucionar esto, la entrada debe ser igual: Para resolver este problema, la entrada debe ser la siguiente:

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

Y que utilizaría la siguiente función ( con sede fuera de otras soluciones, sino que se extendió un poco) que utilizaría las siguientes funciones (en base a otras soluciones, sino que se extendió un poco)

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

Casa # 6

La mejor manera de la incluyen es de la polyfill para el JSON del objeto. La mejor forma de hacerlo es polyfill incluido en JSON objeto.

(Si usted insiste el crear un método Pero, para serializar a notación de objetos JSON AN ! Los valores válidos para JSON ) al interior de El espacio de nombres de jQuery, se puede hacer algo como lo siguiente: Pero si insiste para crear un espacio en el serializar nombre jQuery objetos en la representación JSON notación JSON (el valor efectivo del método), se puede hacer esto:

implementación cumplimiento

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

uso uso

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);
Artículos originales publicados 0 · ganado elogios 136 · vistas 830 000 +

Supongo que te gusta

Origin blog.csdn.net/xfxf996/article/details/105266575
Recomendado
Clasificación