javascript - method - jquery fn extend
jquery json a la cadena? (5)
La mayoría de los navegadores tienen un objeto JSON
nativo actualmente, que incluye métodos de parse
y de stringify
. Intenta con JSON.stringify({})
y ve si obtienes "{}"
. Incluso puede pasar parámetros para filtrar las claves o hacer una impresión bonita, por ejemplo, JSON.stringify({a:1,b:2}, null, 2)
pone una nueva línea y 2 espacios delante de cada tecla.
JSON.stringify({a:1,b:2}, null, 2)
da
"{/n /"a/": 1,/n /"b/": 2/n}"
que se imprime como
{
"a": 1,
"b": 2
}
En cuanto a la parte de tu pregunta, utiliza el segundo parámetro. Desde http://www.javascriptkit.com/jsref/json.shtml :
El parámetro replacer puede ser una función o una matriz de String / Numbers. Pasa por cada miembro dentro del objeto JSON para permitirle decidir a qué valor debe cambiar cada miembro. Como función, puede regresar:
- Un número, cadena o booleano, que reemplaza el valor original de la propiedad con el devuelto.
- Un objeto, que se serializa y luego se devuelve. Los métodos o funciones de objetos no están permitidos, y se eliminan en su lugar.
- Nulo, que hace que se elimine la propiedad.
Como una matriz, los valores definidos en su interior corresponden a los nombres de las propiedades dentro del objeto JSON que deben conservarse cuando se convierten en un objeto JSON.
En lugar de ir desde una cadena json y usar $ .parseJSON, necesito tomar mi objeto y almacenarlo en una variable como cadena que representa json.
(Una biblioteca con la que estoy tratando espera un tipo de json malformado, así que necesito perder el tiempo para que funcione).
¿Cuál es la mejor manera de hacer esto?
La mejor forma que he encontrado es usar jQuery JSON
Podría analizar el JSON a un objeto, luego crear su JSON malformado a partir del objeto ajavscript. Esta puede no ser la mejor en cuanto a rendimiento, sin embargo.
De lo contrario, si solo necesita realizar cambios muy pequeños en la cadena, simplemente trátela como una cadena y destrúyala usando javascript estándar.
yo suelo
$.param(jsonObj)
que me da la cuerda.
Editar: debe usar la biblioteca json2.js de Douglas Crockford en lugar de implementar el código a continuación. Proporciona algunas características adicionales y un mejor / viejo soporte de navegador.
Obtenga el archivo json2.js de: https://github.com/douglascrockford/JSON-js
// implement JSON.stringify serialization
JSON.stringify = JSON.stringify || function (obj) {
var t = typeof (obj);
if (t != "object" || obj === null) {
// simple data type
if (t == "string") obj = ''"''+obj+''"'';
return String(obj);
}
else {
// recurse array or object
var n, v, json = [], arr = (obj && obj.constructor == Array);
for (n in obj) {
v = obj[n]; t = typeof(v);
if (t == "string") v = ''"''+v+''"'';
else if (t == "object" && v !== null) v = JSON.stringify(v);
json.push((arr ? "" : ''"'' + n + ''":'') + String(v));
}
return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
}
};
var tmp = {one: 1, two: "2"};
JSON.stringify(tmp); // ''{"one":1,"two":"2"}''
Código de: http://www.sitepoint.com/blogs/2009/08/19/javascript-json-serialization/