json同胞数据

(如果我使用稍微不正确的语言,请原谅我 – 随意根据需要建设性地纠正)

有几篇关于从返回对象中的兄弟姐妹的JSON数据中获取数据的post,但是我在将这些信息应用到我的情况时遇到了麻烦:

我有一堆对象从REST调用返回为JSON,并且每个对象都有一个特定键的节点:value我需要提取特定键的兄弟节点的数值。 例如:

对于以下对象列表,我需要在“file_size”中为每个匹配“desc”的对象添加数字,并将其返回到页面上匹配的输入值。

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

您可以使用以下function:

 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_size属性,则必须使用hasOwnProperty来检查它 。 你应该可以很容易地为你的jQuery .each调整这个。

 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/ 。

这是一个嵌入在对象中的数组,所以

 data.ResultSet.Result[2].file_size 

会给你778174

 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 }; 

像下面这样的迭代应该完成这项工作,

 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/