2010-08-29 11 views
77

En lugar de pasar de una cadena json y usar $ .parseJSON, necesito tomar mi objeto y almacenarlo en una variable como una cadena que representa json.jquery json a la cadena?

(Una biblioteca que estoy tratando con una espera JSON malformación tipo así que tengo que perder el tiempo con él para conseguir que funcione.)

Cuál es la mejor manera de hacer esto?

+1

posible duplicado de [La serialización de JSON en jQuery] (http://stackoverflow.com/questions/191881/serializing-to-json-in-jquery) – Wolph

+0

qué biblioteca espera una cadena JSON malformación? :/ –

+0

Stanford JavaScript Cryptography Library muestra y analiza JSON malformado, el error se ha trabajado en este momento. – Incognito

Respuesta

84

Editar: Debe utilizar 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.

Coge el archivo de json2.js: 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/

+23

Recomendaría la biblioteca [json2.js] (http://www.json.org/json2.js) en lugar de esta función, porque no maneja correctamente algunos tipos, como propiedades que contienen funciones 'undefined', (que no son valores JSON válidos), objetos booleanos (por ejemplo, 'new Boolean (true);'), o 'NaN' que debe reemplazarse por' null', etc ... tampoco admite la opción adicional argumentos, la función 'replacer' y el número' espacios' para sangría, que están [completamente descritos] (http://ecma262-5.com/ELS5_HTML.htm#Section_15.12.3) en el estándar. – CMS

+3

Creo que tal vez el enlace json2 debería ser: https://github.com/douglascrockford/JSON-js/blob/master/json2.js – fisherwebdev

+5

La mayoría de los navegadores tienen un objeto JSON nativo actualmente, que incluye métodos de análisis sintáctico y de stringify. Intente con 'JSON.stringify ({})' y vea si obtiene '" {} "' sin necesidad de incluir el código anterior. Incluso puede pasar parámetros para filtrar claves o hacer impresiones bonitas, p. 'JSON.stringify ({a: 1, b: 2}, null, 2)' pone una nueva línea y 2 espacios delante de cada tecla. – AlexChaffee

0

Puede analizar el JSON de un objeto y luego crear el 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úyalo mediante javascript estándar.

39

utilizo

$.param(jsonObj) 

que me obtiene la cadena.

+8

Pero esto no crea JSON (y eso fue la pregunta). –

+22

pero este pequeño código está haciendo todo el título de las solicitudes de preguntas: P –

10

La mejor manera que he encontrado es utilizar jQuery JSON

+2

¿por qué no es esta una buena respuesta? – VDP

+1

porque es un jquery _plugin_ & no lo proporciona directamente jquery –

+0

@ user01 pero jquery no incluye una forma de hacerlo (al menos no lo hizo cuando escribí esta respuesta, no estoy seguro de si lo hace ahora) –

34

mayoría de los navegadores tienen una JSON objeto nativo en estos días, que incluye parsestringify y métodos. Así que solo prueba JSON.stringify({}) y mira si obtienes "{}". Incluso puede pasar parámetros para filtrar claves o hacer impresiones bonitas, p. JSON.stringify({a:1,b:2}, null, 2) pone una línea nueva y 2 espacios delante de cada tecla.

JSON.stringify({a:1,b:2}, null, 2) 

da

"{\n \"a\": 1,\n \"b\": 2\n}" 

que imprime como

{ 
    "a": 1, 
    "b": 2 
} 

En cuanto al jugar un poco parte de su pregunta, utilice el segundo parámetro. De http://www.javascriptkit.com/jsref/json.shtml:

El parámetro sustituto puede ser o bien una función o una matriz de de Cuerda/Números. Pasa por cada miembro dentro del objeto JSON al y le permite decidir a qué valor debe cambiar cada miembro. En función puede volver:

  • Un número, una cadena o booleano, que sustituye el valor original de la propiedad con la devuelta.
  • Un objeto, que se serializa y se devuelve. Los métodos o funciones de objetos no están permitidos, y se eliminan en su lugar.
  • Nulo, lo que hace que la propiedad sea eliminada.

como una matriz, los valores definidos en su interior corresponde a los nombres de las propiedades dentro del objeto JSON que deben ser retenidos cuando convierte en un objeto JSON.

Cuestiones relacionadas