2009-11-20 3 views
1

J'ai un JSON comme:Erreur à JSON: « manquant] après la liste des éléments » ou tout simplement « non défini »

{"156644":{ "name":"name1", 
      "street":"street1", 
      "city":"city1" 
"68656":{ "name":"name2 ", 
      "street":"street2", 
      "city":"city1" 
"388655":{ "name":"name3", 
      "street":"street3", 
      "city":"city1" 
"4564":{ "name":"name4", 
      "street":"street4", 
      "city":"city1" 
"6333":{ "name":"name5", 
      "street":"street5", 
      "city":"city1"}} 

Maintenant, je veux décoder JSON. Dans mon Javascript je l'ai écrit:

 var object = eval(obj_json); 
     if(typeof(object)!="undefined"){ 
      //fuel 
      for (var ii=0; ii<object.length; ii++){ 
       alert(ii) 
      } 
     } 

Maintenant, j'obtiens une erreur non définie à object.length. Donc, j'ai essayé d'analyser mon json comme:

var object = eval(' (' + obj_json + ') '); alert(object.length); 

mais cela ne fonctionne pas du tout. Maintenant, je reçois une erreur "missing] after list element".

peut me aider? PLZ!

+1

Est-ce que c'est juste moi, ou est-ce qu'il vous manque des accolades et des virgules? –

+0

Eh bien, devinez ce n'est pas juste moi alors ... –

Répondre

0

BTW: Je résolu ce problème en codant:

eval("var jsonobject=" + obj_json); 

maintenant ça marche! Maintenant, je peux écrire:

for(ii in jsonobject){ 
    var intii = parseInt(ii); 
    if (!isNaN(intii)){ 
     var street = jsonobject[ii].street; 
     alert(street) 
    } 
} 
3

Vous êtes absent crochets de fermeture après chaque élément:

{"156644":{ "name":"name1", 
      "street":"street1", 
      "city":"city1"  // Bracket needs to be here! 
"68656":{ "name":"name2 ", 
      "street":"street2", 
      "city":"city1"  // Bracket needs to be here! 
// ... 

Au lieu de cela, il devrait probablement ressembler à:

{"156644":{ "name":"name1", 
      "street":"street1", 
      "city":"city1"}, 
"68656":{ "name":"name2 ", 
      "street":"street2", 
      "city":"city1"}, 
// ... 
1

Vous êtes absent fermeture } bidules dans tous les sens. N'avez-vous pas voulu dire ceci:

{"156644":{ "name":"name1", 
      "street":"street1", 
      "city":"city1" }, // THIS, RIGHT HERE 
"68656":{ "name":"name2 ", 
      "street":"street2", 
      "city":"city1" }, // AND THIS 
"388655":{ "name":"name3", 
      "street":"street3", 
      "city":"city1" }, // AND THIS 
"4564":{ "name":"name4", 
      "street":"street4", 
      "city":"city1" }, // AND THIS 
"6333":{ "name":"name5", 
      "street":"street5", 
      "city":"city1"}} 
0

En supprimant toute suggestion quant au problème, car les deux messages de l'OP ont un contenu différent. Mais toujours recommander JSONLint.

+0

OP ai essayé votre deuxième 'eval' exemple (voir le fond de la question). –

+0

Merci, n'a pas remarqué cela. Mais j'ai juste remarqué le vrai problème. – kdgregory

+0

OP * utilise * les chaînes comme clés. Ils contiennent simplement des valeurs numériques :) –

0

Si tel est une décharge exacte de votre JSON, votre problème est avec vos noms var;

Votre fournisseur JSON a besoin de changer leur sortie, ou si vous devez l'analyser avant d'essayer de le décoder, pour obtenir des noms propres var là:

json=eval(obj_json.replace(/([, \n\r\t])([0-9]*):/g, '$1"v_$2":'));

(pas rigoureusement testé, juste un exemple qui fonctionne sur le code exemple)

Questions connexes