2014-04-14 33 views
2

我试图解析JSON数组对象,并使用它们来创建多个复选框。 这是我有:解析JSON数组中的jQuery在foreach循环

JSON数据:

[{ 
    "ID": 1, 
    "Name": "Bacon", 
    "Description": "", 
    "Price": 0 
}, { 
    "ID": 2, 
    "Name": "Beef", 
    "Description": "", 
    "Price": 0 
}, { 
    "ID": 3, 
    "Name": "Chicken", 
    "Description": "", 
    "Price": 0 
}, { 
    "ID": 4, 
    "Name": "Ham", 
    "Description": "", 
    "Price": 0 
}] 

在JS代码,我有这样的:

success: function (data) { 
    var objects = JSON.stringify(data); 
    for (var key in objects) { 
     var checkBox = "<input type='checkbox' data-price='" + key.Price + "' name='" + key.Name + "' value='" + key.ID + "'/>" + key.Name + "<br/>"; 
     $(checkBox).appendTo('#modifiersDiv'); 
    }; 
    $('#addModifiers').modal('show'); 
} 

但关键的对象不包含任何数据。我的问题是我如何做foreach循环并获取我需要的数据并在复选框属性中获取数据。

由于提前,Laziale

+0

你为什么会循环之前字符串化?如果有的话,你想'parse' – tymeJV

+0

你的数据是一个数组。你应该只遍历数组,然后参考'数据[I] .ID','数据[I] .Name',等等。另外,为什么你叫'JSON.stringify()'?你希望它是一个JavaScript数组,而不是一个字符串。 – jfriend00

+0

你需要知道什么'data'是在成功处理程序。如果你使用jQuery的Ajax调用正确的,它应该已经是一个javascript数组,你可以直接迭代它作为一个阵列。第1步,做一个'console.log(data)'看看它到底是什么。 – jfriend00

回答

8

你的数据应该已经是一个javascript数组了,因为你已经为jQuery Ajax调用指定了JSON类型它应该已经将JSON解析为javascript。因此,你可以直接迭代它作为数组:

success: function (data) { 
    for (var i = 0; i < data.length; i++) { 
     var checkBox = "<input type='checkbox' data-price='" + data[i].Price + "' name='" + data[i].Name + "' value='" + data[i].ID + "'/>" + data[i].Name + "<br/>"; 
     $(checkBox).appendTo('#modifiersDiv'); 
    } 
    $('#addModifiers').modal('show'); 
} 

或者,如果你想使用jQuery的.each()迭代器,而非for循环,你可以这样做:

success: function (data) { 
    $.each(data, function(key, item) { 
     var checkBox = "<input type='checkbox' data-price='" + item.Price + "' name='" + item.Name + "' value='" + item.ID + "'/>" + item.Name + "<br/>"; 
     $(checkBox).appendTo('#modifiersDiv'); 
    }); 
    $('#addModifiers').modal('show'); 
} 
4

你不应该使用var objects = JSON.stringify(data);,因为该数据已经是一个JSON对象。

使用JSON.stringify从对象创建字符串

使用JSON.parse是从字符串创建一个对象

实施例:

var data = [{id: 1, name:'personsName'}, {id: 2, name:'personsName2'}] 
var string = JSON.stringify(data) 
var json = JSON.parse(string) 

可以循环槽的数据,并通过使用附加:

data.forEach(function(key, index){ 
    $("#modifiersDiv") 
     .append($("<input></input>") 
     .attr("type", "checkbox") 
     .attr("data-price",key.Price) 
     .attr("name",key.Name) 
     .attr("value",key.ID) 
     .text(key.Name); 
} 
+0

如果您正确使用jQuery的Ajax调用,它将已经解析了JSON。 – jfriend00

+0

SyntaxError:JSON。解析:出乎意料的字符我得到这个错误,让我看看我能做些什么 – Laziale

+0

@ jfriend00,只要他在ajax函数上设置了类型attribue;) – Arthur

0

您试着c在json字符串上而不是在json对象上使用json字符串(使用JSON.parse来做到这一点)。

// You have a string and you want and object : 
var string = "[....]"; 
var object = JSON.parse(string); 

// You have a object and you want and string: 
var object = {...}; 
var string = JSON.stringify(object); 

或者你可以更好的使用jQuery的AJAX功能的类型attribut,(把“JSON”你的成功后的功能和jQuery给你AVEC对象,而不是一个JSON字符串)。 如果你已经这样做了,你已经有了一个对象,所以你不需要更新你的数据

+0

我可以如何为每个部分遍历项目? – Laziale

+0

如果您已经在jQuery ajax函数中设置了type属性,那么数据已经是一个对象,所以juste不会调用您JSON函数并将数据params重命名为对象。 – Arthur

0

使用

$.each(data, function(key, value){ 
     var checkBox = "<input type='checkbox' data-price='" + value.Price + "' name='" + value.Name + "' value='" + value.ID + "'/>" + value.Name + "<br/>"; 
     $(checkBox).appendTo('#modifiersDiv'); 
    });