Tengo una json como:

 {"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"}}

Ahora quiero decodificar este json. En mi Javascript escribí:

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

Ahora obtengo un error indefinido en object.length. Así que traté de analizar mi json como:

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

Pero esto no funciona en absoluto. Ahora aparece el error "falta] después de la lista de elementos".

¿Puedes ayudarme? PLZ!

1
Newbie 20 nov. 2009 a las 15:41

5 respuestas

La mejor respuesta

Por cierto: arreglé este problema codificando:

eval("var jsonobject=" + obj_json);

¡ahora funciona! Ahora puedo escribir:

for(ii in jsonobject){
    var intii = parseInt(ii);
    if (!isNaN(intii)){
        var street = jsonobject[ii].street;
        alert(street)
    }
}
0
Newbie 5 ene. 2010 a las 09:34

Sacando cualquier sugerencia sobre el problema, ya que las dos publicaciones del OP tienen un contenido diferente. Pero aún así recomiendo JSONLint.

0
kdgregory 20 nov. 2009 a las 14:10

Si ese es un volcado exacto de su JSON, entonces su problema es con sus nombres var;

Su proveedor JSON necesita cambiar su salida, o debe analizarlo antes de intentar decodificarlo, para obtener los nombres de var adecuados allí:

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

(no rigurosamente probado, solo un ejemplo que funciona en el código de ejemplo)

0
OhkaBaka 20 nov. 2009 a las 13:51

Te falta cerrar } cositas por todo el lugar. ¿No quisiste decir esto?

 {"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"}}
1
Roatin Marth 20 nov. 2009 a las 12:46

Te faltan los corchetes después de cada elemento:

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

En cambio, probablemente debería verse así:

 {"156644":{ "name":"name1",
           "street":"street1",
           "city":"city1"},
 "68656":{  "name":"name2 ",
           "street":"street2",
           "city":"city1"},
 // ...
3
John Feminella 20 nov. 2009 a las 12:45