0

httpリクエスト(ajaxを使用)をサーバーに送信すると、次のようなjson文字列が返されます:

{

    "neighbors":{
        "data":[
            {
                "id":"7f40cb24-603e-4943-9a0b-e16e024c8bd5",
                "name":"jeff ferry",
                "picture":"url",
                "location":{
                    "data":[
                        {
                            "latitude":"xxx",
                            "longitude":"yyy"
                        }
                    ]
                }
            }
        ]
    }
}

そしてhtmlページのajaxコールバックでは、次のようなデータにアクセスしています:

success: function (data) {

    var outerObj = data.neighbor.data;    
    var res = ""; 

    for (i in outerObj )          
    {
    if (outerObj .hasOwnProperty(i)) {
        // my outer stuff              
            var innerObj = outerObj.data;
            for (j in innerObj)          
            {
            // my inner stuff
                if (innerObj.hasOwnProperty(j)) {
                }
            }
        }                                            
    }
}

しかし、最適化された(より短い)方法でアクセスできるかどうか疑問に思っていますか?

かなりの助け

4

4 に答える 4

3

サーバーから返されるデータ構造を強化できますか? 1) location プロパティは実際には単なる緯度/経度のタプルであり、2) 内側のdata配列の周りのオブジェクトは単なる冗長なラッパーであるため、これはどうですか:

{
    "neighbors":[
        {
            "id":"7f40cb24-603e-4943-9a0b-e16e024c8bd5",
            "name":"jeff ferry",
            "picture":"url",
            "location":["xxx","yyy"]
        }
    ]
}

そうすれば、JavaScript は次のようになります。

success: function (data) {

    var res = ""; // what was this for, anyway?

    for (var n in data.neighbors) if (data.neighbors.hasOwnProperty(n) {
        var neighbor = data.neighbors[n];
        // actions on the neighbor object here

        var location = neighbor.location;
        // actions on the location here
    }
}
于 2012-11-29T08:29:07.840 に答える
2

jQueryを使いたい場合

var data
$.getJSON(thejsonfile, function(e) {
   data = e.neighbors.data[0]
})

「隣人」内のすべてのデータはデータ内にあり、「データ」を使用してそれらを参照できます

IDを取得したいので、この方法で参照してくださいvar id = data.id

注:これらの角括弧内[]はループを指し、「近隣」リスト内に1つ以上のデータがあった場合、使用してループする必要があります$.map() or $.each()

于 2012-11-29T08:29:45.400 に答える
1

内部プロパティのみを気にすると仮定すると、try-catch ブロックでラップするだけです。

var outer, inner;
try {
    outer = data.neighbors.data[0];
    inner = outer.location.data[0];
    delete outer.location;
} catch (e) {
    // no good
}

つまり、このように

アウター

{"id":"7f40cb24-603e-4943-9a0b-e16e024c8bd5","名前":"ジェフ フェリー","写真":"url"}

インナー

{"緯度":"xxx","経度":"yyy"}

于 2012-11-29T08:21:13.807 に答える
1

neighbours.data配列です。それらを反復処理する場合は、foreach ではなく for ループを使用します。

var i = 0,
    outerLength = (neighbours.data && neighbours.data.length) || 0,
    innerLength, j,
    outerObj, innerObj;

for (; i < length; i++) {
    outerObj = neighbours.data[i];

    j = 0;
    innerLength = (outerObj.data && outerObj.data.length) || 0;

    for (; j < innerLength; j++) {

        innerObj = outerObj.data[j];
        // do what you wish! 
    }

}
于 2012-11-29T08:28:48.233 に答える