2010-05-09 114 views
23

我有一个函数,将获得与对象的JSON数组。在函数中,我将能够遍历数组,访问一个属性并使用该属性。就像这样:使用JSON数组与对象与JavaScript

变量,我将传递给函数看起来就像这样:

[{"id":28,"Title":"Sweden"}, {"id":56,"Title":"USA"}, {"id":89,"Title":"England"}] 

function test(myJSON) 
{ 
    // maybe parse my the JSON variable? 
    // and then I want to loop through it and access my IDs and my titles 
} 

任何建议,我怎么能解决呢?

+0

的问题不明确。提供更准确和描述性的代码。 – 2010-05-09 21:39:50

回答

3

'JSON array containing objects'我猜你的意思是一个包含JSON的字符串?

如果是这样,您可以使用安全var myArray = JSON.parse(myJSON)方法(本机或包括使用JSON2)或美国国家安全局var myArray = eval("(" + myJSON + ")")。通常应避免评估,但如果您确定内容是安全的,那就没有问题了。

之后,您只需像往常一样遍历数组。

for (var i = 0; i < myArray.length; i++) { 
    alert(myArray[i].Title); 
} 
2

你的问题感觉有点不完整的,但我认为你在寻找什么是使你的访问JSON你的代码的方式:

如果你有JSON字符串如上,那么你” ð只需要做到这一点

var jsonObj = eval('[{"id":28,"Title":"Sweden"}, {"id":56,"Title":"USA"}, {"id":89,"Title":"England"}]'); 

那么你就可以像jsonObj访问这些瓦尔[0] .ID等

让我知道这是你和I'l都拿到不算什么我会尽力帮忙

M

+2

你不应该使用eval()来解析JSON,你知道吗?使用JSON.parse()。 – jpangamarca 2015-06-15 14:55:51

+0

^因为使用'eval()'你更脆弱,因为JS函数接受所有JS表达式(https://stackoverflow.com/questions/1843343/json-parse-vs-eval) – Remi 2017-12-12 16:41:30

42

这不是一个单一的JSON对象。你有一个JSON对象数组。您需要首先循环访问数组,然后访问每个对象。也许下面的例子开球是有帮助的:

var arrayOfObjects = [{"id":28,"Title":"Sweden"}, {"id":56,"Title":"USA"}, {"id":89,"Title":"England"}]; 

for (var i = 0; i < arrayOfObjects.length; i++) { 
    var object = arrayOfObjects[i]; 
    for (var property in object) { 
     alert('item ' + i + ': ' + property + '=' + object[property]); 
    } 
    // If property names are known beforehand, you can also just do e.g. 
    // alert(object.id + ',' + object.Title); 
} 

要了解更多关于JSON,检查this article

更新:如果JSON对象数组实际传递在为一个普通的字符串,那么你的确会需要eval()这里。

var string = '[{"id":28,"Title":"Sweden"}, {"id":56,"Title":"USA"}, {"id":89,"Title":"England"}]'; 
var arrayOfObjects = eval(string); 
// ... 
+5

记住'if(object.hasOwnProperty (...' – 2010-05-09 21:47:49

+0

+ 1 for eval()更新,浪费了很多时间没有意识到我需要将字符串转换为对象 – 2012-05-14 16:43:02

+1

@PeadarDoyle:不客气,请确保该字符串不包含用户或者你可能会冒JS代码注入的风险,但最好从一开始就传入一个完整的JS对象,即删除围绕字符串的引号(如果有的话) – BalusC 2012-05-14 16:48:58

7

这是您的dataArray

[ 
    { 
     "id":28, 
     "Title":"Sweden" 
    }, 
    { 
     "id":56, 
     "Title":"USA" 
    }, 
    { 
     "id":89, 
     "Title":"England" 
    } 
] 

然后parseJson可用于:

$(jQuery.parseJSON(JSON.stringify(dataArray))).each(function() { 
    var ID = this.id; 
    var TITLE = this.Title; 
}); 
0

@Swapnil Godambe 如果JSON.stringfy被删除它为我工作。 那就是:

$(jQuery.parseJSON(dataArray)).each(function() { 
    var ID = this.id; 
    var TITLE = this.Title; 
}); 
-1

var datas = [{"id":28,"Title":"Sweden"}, {"id":56,"Title":"USA"}, {"id":89,"Title":"England"}]; 
 
document.writeln("<table border = '1' width = 100 >"); 
 
document.writeln("<tr><td>No Id</td><td>Title</td></tr>"); 
 
for(var i=0;i<datas.length;i++){ 
 
document.writeln("<tr><td>"+datas[i].id+"</td><td>"+datas[i].Title+"</td></tr>"); 
 
} 
 
document.writeln("</table>");