0

私は JQuery で Json ファイルを解析しています。ここから .each ループを for ループに変換する方法とループ自体が機能する大きな助けを得ました。他の問題があります。data.length は常に未定義であり、コードはループしません:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
</script>
    <script>

    $.getJSON('db.json', function(data) 
    {


    var items = [];
    var i, val;

    console.log(data); //is full and ok
    console.log(data.length); //problem here
    for (i=0; i< data.length; i++) 
    {
        val = data[i];
        if(typeof val === 'object') 
        {
            //doing some stuff
        } 

    }

    });

    </script>

コンソール:

Object { @file_name="materials", materials=[10], simulations=[10], more...}
undefined
4

2 に答える 2

2

オブジェクトにはプロパティがありませんlength(プロパティを指定しない限り)。配列はそうですが、オブジェクトはそうではありません。

そのオブジェクトのプロパティをループしたい場合は、for-inループまたは jQuery の$.each.

for-inループ:

$.getJSON('db.json', function(data) 
{


var items = [];
var i, val;

for (i in data)
{
    val = data[i];
    if(typeof val === 'object') 
    {
        //doing some stuff
    } 

}

});

詳細についてfor-in は、私のブログをご覧ください。JSON から逆シリアル化されたオブジェクトは列挙可能な継承プロパティを持つことができないため、継承プロパティを気にせずに上記を使用しています。

$.each:

$.getJSON('db.json', function(data) 
{


var items = [];

$.each(function(i, val) {
    if(typeof val === 'object') 
    {
        //doing some stuff
    } 

});

});

* "...JSON からデシリアライズされたオブジェクトは、列挙可能な継承プロパティを持つことはできません。"

それは実際には間違っています。誰かが列挙可能なプロパティを に追加した場合、彼らは持つことができますObject.prototype。しかし、本番コードでそれを行っている人は誰でも、公の場で口頭でむち打たれるべきです。:-)

于 2013-08-11T13:38:00.620 に答える
2

コンソール出力を考えると、返された値はArray(オブジェクトの) ではなく、単一のObject. lengthオブジェクトにはプロパティがありません。

于 2013-08-11T13:38:47.457 に答える