Esta traducción de: Serialización a JSON en jQuery [Duplicar]
Esta pregunta ya tiene una respuesta aquí: El problema aquí tiene la respuesta:
- Un objeto de JSON Serializar 3 Respuestas serializar objetos en JSON 3 respuestas
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);