使用JavaScript的JSON对象数组

54

我有一个函数,可以获取一个包含对象的JSON数组。在函数中,我将能够循环遍历数组,访问属性并使用该属性。就像这样:

我将传递给函数的变量将类似于此:

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

有什么建议可以解决这个问题吗?


问题不清楚,请提供更准确和描述性的代码。 - Sky Sanders
7个回答

72

这不是一个单独的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对象数组实际上是一个普通的字符串,那么你确实需要在这里使用 eval()

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

了解更多关于 JSON 的内容,请查看 MDN web 文档:使用 JSON 进行工作


5
记住 if (object.hasOwnProperty(...。(说明:这是一段英文代码,意思是检查一个对象是否具有指定的属性。直接翻译为“如果(对象具有某个特定属性)”可能不太准确,因为 hasOwnProperty() 方法只检查对象本身是否包含该属性,而不会检查原型链上的属性。) - Sean Kinsey
+1 对于 eval() 的更新,浪费了很多时间才意识到我需要将字符串转换为对象。 - Peadar Doyle
1
@PeadarDoyle:不用谢。请确保此字符串不包含用户可控数据,否则可能会存在JS代码注入的风险。但更好的方法是从一开始就传递一个完整的JS对象。即使有引号,也应该将其删除。 - BalusC
+1 bra. 我一直在寻找一种方法,将Ajax响应字符串转化为Bootstrap多选。这个变量arrayOfObjects = eval(string)解决了问题。 - Thakhani Tharage

17
这是你的 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;
});

6
我猜您所说的“包含对象的JSON数组”是指一个包含JSON的字符串?
如果是这样,您可以使用安全的var myArray = JSON.parse(myJSON)方法(原生或使用JSON2),或者使用不安全的var myArray = eval("(" + myJSON + ")")。通常应避免使用eval,但如果您确定内容是安全的,则没有问题。
之后,您只需像正常情况下一样迭代数组即可。
for (var i = 0; i < myArray.length; i++) {
    alert(myArray[i].Title);
}

4
你的问题有些不完整,但我认为你想要的是一种使你的JSON对你的代码可访问的方法:
如果你有上面所示的JSON字符串,那么你只需要这样做:
var jsonObj = eval('[{"id":28,"Title":"Sweden"}, {"id":56,"Title":"USA"}, {"id":89,"Title":"England"}]');

接下来,您可以通过类似于jsonObj [0] .id等的方式访问这些变量。

如果这不是您想要的,请告诉我,我会尽力帮助。

M


4
不应该使用eval()来解析JSON,你知道吗?应该使用JSON.parse()。 - jpangamarca
1
由于使用 eval(),您更容易受到攻击,因为该JS函数接受所有JS表达式(https://dev59.com/rnI-5IYBdhLWcg3wc4Cw)。 - Remi

2

@Swapnil Godambe 如果去掉JSON.stringfy,对我而言它是有效的。 也就是说:

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

0

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>");


0

// Define a JSON array with objects
var employees = [    {        "name": "John",        "age": 30,        "department": "Sales"    },    {        "name": "Emily",        "age": 28,        "department": "Marketing"    },    {        "name": "Michael",        "age": 35,        "department": "Finance"    }];

// Accessing the objects in the array
console.log(employees[0].name);      // Output: John
console.log(employees[1].age);       // Output: 28
console.log(employees[2].department); // Output: Finance
Json Full Form or What Is Json


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接