2011-06-08 3 views
0

Je suis en train d'analyser un grand fichier JSON (240'000 caractères) en utilisant javascript. J'utilise ajax pour récupérer les données json d'une servlet. Le code que j'utilise fonctionne bien avec des échantillons plus petits, mais jette juste cela quand xmlHttp.responseText contient beaucoup de données json.problème en utilisant l'analyse syntaxique grande JSON eval et alternatives

Uncaught SyntaxError: Unexpected token ILLEGAL 
mycallbackFunction 
xmlHttp.onreadystatechange 

Il dit que le jeton inattendu est sur la ligne contenant

var data = eval('(' + xmlHttp.responseText + ')'); 

Tel est le sens du code:

getJsonData(mycallbackFunction, parameters); 

function getJsonData(callbackFunction, parameters){ 
    var xmlHttp = new XMLHttpRequest(); 

    xmlHttp.open('GET', servlet_url + parameters, true); 
    xmlHttp.onreadystatechange = function(){ 
     callbackFunction(xmlHttp); 
    } 
    xmlHttp.setRequestHeader('Content-Type', 'application/json'); 
    xmlHttp.send(null); 
} 

function mycallbackFunction(xmlHttp){ 
    var data = eval('(' + xmlHttp.responseText + ')'); 
} 

La méthode qui utilise eval() est appelée à partir xmlHttp.onreadystatechange si cela fait une différence.

J'ai aussi essayé d'utiliser json2.js et obtenir le même résultat, il fonctionne très bien avec des échantillons de JSON plus petits mais lorsque je tente avec mes 240K caractères fichier, il dit:

Uncaught #<Object> 

Merci à l'avance.

+0

Avez-vous essayé d'utiliser le natif du navigateur Capacités d'analyse JSON au lieu de 'eval()'? –

+3

ne sera pas la taille qui est le problème - vous avez mal formé JSON quelque part. – BonyT

+2

@BonyT fait un bon point. Est-ce que le JSON valide sur http://jsonlint.com? (S'il peut traiter 240k de données) –

Répondre

1

Vous devez utiliser

var data = JSON.parse(xmlHttp.responseText); 

Pour assurer un analyseur de JSON est disponible dans les navigateurs qui ne fournissent pas un (toux IE toux), vous devez inclure json2.js de Douglas Crockford sur votre page avant d'autres scripts.

Si l'analyseur des erreurs sur vos données, vous devez valider le JSON pour les problèmes via quelque chose comme http://jsonlint.com/. Si vous en avez besoin, vous devez diviser vos données en plus petits morceaux pour le site de validation.

Aussi, pour être sûr que votre JSON est valide, vous devez utiliser une méthode de sérialisation appropriée JSON au niveau du serveur, plutôt que « manuellement » sortie via echos, estampes, etc.

+0

Merci pour la réponse. Le problème n'était pas avec l'analyse mais avec des données erronées. Je vais créer une autre question pour cela. –

Questions connexes