Tengo una cadena de st de regresar de un servicio web. Puedo convertir la cadena a un objeto, ¿cómo puedo contar los que no. de matrices dentro de ella? (para este caso es 2)

var st = "{[{"Name": "fake", "Address": "add"]},[{"Name": "fake", "Address": "add"}]}";  
var json = eval(st);  

json.length es siempre volviendo 1

OriginalEl autor coure2011 | 2010-03-12

5 Comentarios

  1. 17

    @coure06 he cambiado un poco su JSON. Espero que esto sea útil

    var persons = {
        "person1" : {
            "Name": "Adam",
            "Address": "USA" 
        },
        "person2" : {
            "Name": "Jamie",
            "Address": "USA" 
        }
    };
    var count = 0;
    //var count = persons.length;          //wont work
    for ( property in persons )          //should return 2
    {
       if(persons.hasOwnProperty(property))
       {
          count++;
       }
    }

    Ejemplo en vivo en jsfiddle

    debe utilizar hasOwnProperty: for( var x in persons ) if(persons.hasOwnProperty(x)) count++;

    OriginalEl autor Bakudan

  2. 5

    Me sorprende json.length está volviendo a la nada; que la cadena JSON no es válido. La parte más externa de llaves ({}) se refieren a un objeto, el cual debe contener las claves y valores, pero sólo contiene un valor (el de la matriz, con ninguna tecla).

    Si quita las llaves, debería funcionar correctamente. Hizo ahí, quizá porque había visto hacer? Si es así, usted quiere paréntesis (()), no las llaves.

    Nota de que el uso de eval en las cadenas JSON no está seguro, usted desea utilizar un JSON decodificador que no uso eval (como json2.js, que utiliza eval, pero sólo después de mucho cuidado garantizar que es seguro hacerlo, modificando si es necesario), para una seguridad óptima. El paréntesis de ayuda, pero no son en absoluto una solución completa.

    OriginalEl autor T.J. Crowder

  3. 2

    Aquí está el truco!

    var jsonString = "{field1:'data1',field2:'data2',arrField1:['arrField1Content1','arrField1Content2']}";
    var obj = eval('(' + jsonString + ')');
    
    var objCount=0;
    for(_obj in obj) objCount++;
    
    alert(objCount);

    OriginalEl autor skidadon

  4. 1

    Trate de usar este,

    var persons = {
        "person1" : {
            "Name": "Adam",
            "Address": "USA" 
        },
        "person2" : {
            "Name": "Jamie",
            "Address": "USA" 
        }
    };
    
    Object.prototype.count = function() {
        var that = this,
            count = 0;
    
        for(property in that) {
            if(that.hasOwnProperty(property)) {
                count++;
            }
        }
    
        return count;
    };
    
    alert(persons.count());

    esto podría funcionar para objetos anidados como

    var persons = {
        "person1" : {
            "Name": "Adam",
            "Address": "USA" 
        },
        "person2" : {
            "Name": "Jamie",
            "Address": "USA" ,
            "users": {
                "person1" : {
                    "Name": "Adam",
                    "Address": "USA" 
                },
                "person2" : {
                    "Name": "Jamie",
                    "Address": "USA" 
                }
            }
        }
    };
    
    alert(persons.person2.users.count());
    Elegante, bien hecho!
    Ampliación de objeto no es la mejor idea de stackoverflow.com/a/6877100/179669

    OriginalEl autor Wh0RU

  5. -1
    1. Que no es válido JSON expresión.
    2. No hay ninguna integrada en la manera de contar de los “miembros” de un objeto. Usted puede escribir una, pero es problemático debido a la débil naturaleza de la lengua.

    editar — ahora que me he hecho para el futuro, es posible utilizar Api como Object.keys(), Object.getOwnPropertyNames(), y Object.getOwnPropertySymbols para obtener un recuento de las propiedades de un objeto:

    var props = Object.getOwnPropertySymbols(someObject);
    var length = props.length; //number of properties

    En mi experiencia, es bastante raro que he preocupaba por el número de propiedades de un objeto; por lo general, si usted no sabe lo que es un objeto ya está, estás interesado en propiedades específicas (por el nombre). Sin embargo no hay nada malo con el uso de las Api.

    OriginalEl autor Pointy

Dejar respuesta

Please enter your comment!
Please enter your name here