1

(少し間違った言葉遣いを使用していても許してください - 必要に応じて建設的に修正してください)

返されたオブジェクト内の兄弟の JSON データからデータを取得することに関する投稿がいくつかありますが、その情報を自分の状況に適用するのに問題があります。

REST 呼び出しから JSON として返される一連のオブジェクトがあり、特定のキーのノードを持つオブジェクトごとに、特定のキーの兄弟ノードの数値を抽出する必要があります。例えば:

次のオブジェクトのリストでは、"desc" が一致する各オブジェクトの "file_size" の数値を合計し、それをページ上の一致する入力値に戻す必要があります。

{"ResultSet":{

  Result":[

    {
        "file_size":"722694",
        "desc":"description1",
        "format":"GIF"
    },

    {
        "file_size":"19754932",
        "desc":"description1",
        "format":"JPEG"
    },

    {
        "file_size":"778174",
        "desc":"description2",
        "format":"GIF"
    },

    {
        "file_size":"244569996",
        "desc":"description1",
        "format":"PNG"
    },

    {
        "file_size":"466918",
        "desc":"description2",
        "format":"TIFF"
    }

  ]

}}
4

4 に答える 4

0
var sum = {}, result = ResultSet.Result

// Initialize Sum Storage
for(var i = 0; i < result.length; i++) {
  sum[result[i].desc] = 0; 
}

// Sum the matching file size
for(var i = 0; i < result.length; i++) {
  sum[result[i].desc] += parseInt(result[i]["file_size"]
}

上記のコードを実行すると、次のsumような名前の JSON が作成されます

sum = {
  "description1": 20477629,
  "description2": 1246092
};
于 2012-10-22T17:18:07.350 に答える
0

以下のような反復は仕事をするべきです、

var result =  data.ResultSet.Result;
var stat = {};
for (var i = 0; i < result.length; i++) {    
    if (stat.hasOwnProperty(result[i].cat_desc)) {       
        if (result[i].hasOwnProperty('file_size')) {
        stat[result[i].cat_desc] += parseInt(result[i].file_size, 10);   
        }
    } else {
        stat[result[i].cat_desc] = parseInt(result[i].file_size, 10);
    }   
}

デモ: http://jsfiddle.net/HtrLu/1/

于 2012-10-22T17:29:04.960 に答える
0

次の機能を使用できます。

function findSum(description, array) {
    var i = 0;
    var sum = 0;

    for(i = 0; i < array.length; i++) {
        if(array[i]["desc"] == description && array[i].hasOwnProperty("file_size")) {
            sum += parseInt(array[i]["file_size"], 10);
        }
    }

    alert(sum);
}

そして、次のように呼び出します。

findSum("description1", ResultSet.Result);

"description1"すべてのファイル サイズの合計を含むアラートを表示するには。

動作中の JSFiddle はhttp://jsfiddle.net/Q9n2U/にあります。


divあなたの更新とコメントに応えて、すべての説明の合計でいくつかの を作成する新しいコードを次に示します。hasOwnPropertyデータセットを変更したためコードを取り出しましたが、プロパティのないデータ配列にオブジェクトがある場合は、 を使用して確認するfile_sizehasOwnProperty必要があることに注意してください。.eachこれを jQuery に合わせてかなり簡単に調整できるはずです。

var data = {};
var array = ResultSet.Result;

var i = 0;
var currentDesc, currentSize;
var sizeDiv;
var sumItem;

//Sum the sizes for each description
for(i = 0; i < array.length; i++) {
    currentDesc = array[i]["desc"];
    currentSize = parseInt(array[i]["file_size"], 10);

    data[currentDesc] =
        typeof data[currentDesc] === "undefined"
        ? currentSize
        : data[currentDesc] + currentSize;
}

//Print the summations to divs on the page
for(sumItem in data) {
    if(data.hasOwnProperty(sumItem)) {
        sizeDiv = document.createElement("div");
        sizeDiv.innerHTML = sumItem + ": " + data[sumItem].toString();
        document.body.appendChild(sizeDiv);
    }
}

動作中の JSFiddle はhttp://jsfiddle.net/DxCLu/にあります。

于 2012-10-22T17:29:36.427 に答える
0

これはオブジェクトに埋め込まれた配列なので、

data.ResultSet.Result[2].file_size

あなたに与えるだろう778174

于 2012-10-22T17:11:49.977 に答える