2012-04-28 4 views
76

y JSON.parse son dos funciones que realizan la misma tarea. Si la biblioteca jQuery ya está cargada, ¿sería mejor usar jQuery.parseJSON que usar JSON.parse, en términos de rendimiento?jQuery.parseJSON vs JSON.parse

En caso afirmativo, ¿por qué? Si no, ¿por qué no?

+1

Creo que JSON.parse no está disponible en los navegadores antiguos. En términos de velocidad, deberían ser idénticos, JSON.parse debería ser un poco más rápido (creo que jQuery usa JSON.parse en los navegadores más nuevos). –

Respuesta

108

He aquí un extracto from jQuery 1.9.1:

parseJSON: function(data) { 
    // Attempt to parse using the native JSON parser first 
    if (window.JSON && window.JSON.parse) { 
     return window.JSON.parse(data); 
    } 

    if (data === null) { 
     return data; 
    } 

    if (typeof data === "string") { 

     // Make sure leading/trailing whitespace is removed (IE can't handle it) 
     data = jQuery.trim(data); 

     if (data) { 
      // Make sure the incoming data is actual JSON 
      // Logic borrowed from http://json.org/json2.js 
      if (rvalidchars.test(data.replace(rvalidescape, "@") 
       .replace(rvalidtokens, "]") 
       .replace(rvalidbraces, ""))) { 

       return (new Function("return " + data))(); 
      } 
     } 
    } 

    jQuery.error("Invalid JSON: " + data); 
}, 

Como se puede ver, jQuery utilizará el método nativo JSON.parse si está disponible, y de lo contrario se tratará de evaluar los datos con new Function, que es una especie de como eval.

Así que sí, definitivamente deberías usar jQuery.parseJSON.

+3

¡Guau, excelentes respuestas! Gracias a todos, creo que la tuya es la respuesta más completa. –

+0

Dependiendo de dónde provenga su json, puede haber problemas de seguridad con el método alternativo 'eval'. –

+0

Las cosas rvalidchars.test deben detectar JSON no válido; así que esto se ve bastante seguro. – Daniel

10

According to jQuery

Cuando el navegador proporciona una implementación nativa de JSON.parse, jQuery lo utiliza para analizar la cadena.

por lo que significa que jQuery proporciona un analizador JSON si no existe una implementación nativa en el navegador. here's a comparison chart de los navegadores que tienen (y no tienen) la funcionalidad JSON

+0

Así que lo acerté, sin siquiera saber jQuery;). –

+0

Gracias por la tabla informativa :) –

3

No sé sobre el rendimiento, pero definitivamente es más seguro usar el método jQuery porque algunos navegadores como ie7 y versiones anteriores pueden no tener ninguna funcionalidad JSON de forma nativa.
Todo se basa en la compatibilidad, al igual que con jQuery's cada método en lugar del método forEach nativo de la matriz para la iteración.

+0

IE8 es compatible con JSON. – RiZKiT

+0

tienes razón. Gracias. actualizada la respuesta –

+0

siempre uso JSON.parse (fecha), debido a que nunca el apoyo IE8- y menos caracteres de $ .parseJSON()^_^ Para IE8- vamos a utilizar como esto xicooc

6

JSON.parse() está disponible de forma nativa en algunos navegadores, no en otros, por lo que es más seguro usar una biblioteca. La implementación de JQuery funciona bien, como han señalado otros encuestados. También hay Douglas Crockford's JSON library, que usa la implementación nativa si está disponible.

La biblioteca JSON tiene la ventaja de que tiene un método para convertir un objeto de JavaScript en una cadena JSON, que no se encuentra en jQuery en el momento ..

+0

La mejor respuesta porque indica por qué la biblioteca JSON de Douglas Crockford aún es necesaria. –

2

Hablando de rendimiento, la más actualizada la respuesta es JSON.parse.

El objeto JSON nativa es apoyaron en todos los navegadores hoy en día, por lo que optan por JSON.parse. Se puede ver la mesa de soporte aquí: http://caniuse.com/#feat=json

También puede buscar esta apariencias alias en el repositorio de jQuery en Github: https://github.com/jquery/jquery/search?utf8=%E2%9C%93&q=parseJSON

Además, jQuery.parseJson se obsoleta en la versión 3.0 o superior como se ha mencionado en otras respuestas aquí.

Solo debe utilizar la versión de jQuery si es una versión anterior de JQuery + si desea proporcionar soporte para navegadores muy antiguos (normalmente, no recomendado).

4

Si está utilizando jQuery 3.0+, entonces debe usar JSON.parse porque jQuery.parseJSON ha quedado obsoleto.

A partir de jQuery 3.0, $ .parseJSON está obsoleto. Para analizar objetos JSON, use el método nativo JSON.parse en su lugar.

1

jQuery usa internamente JSON.parse para analizar el archivo JSON. Por lo tanto, no hace ninguna diferencia en la mayoría de los casos.

Pero algunos de los navegadores más antiguos no son compatibles con la funcionalidad JSON.parse.En ese caso, usar jQuery.parseJSON es beneficioso ya que jQuery puede manejar JSON usando su propia función.

NOTA:

jQuery.parseJSON está en desuso desde jQuery 3.0.So por favor utilice el método nativo JSON.parse.

Cuestiones relacionadas