在我项目的一个jsp页面中,我必须使用这个json列表:
var obj_tipo = jQuery.parseJSON( "{"Tipo":[{"id":3,"nome":"gerente"},{"id":4,"nome":"supervisor"},{"id":5,"nome":"analista"},{"id":6,"nome":"tecnico"},{"id":7,"nome":"secretaria"},{"id":8,"nome":"seguranca"}]}" );
var obj_campo = jQuery.parseJSON( "{"Key":[{"id":1,"nome":"e-mail"},{"id":2,"nome":"cidade"}]}" );
我尝试用这种方式阅读列表中的每个项目:
for(var item in obj_tipo.Tipo)
select.append('<option value="'+item.nome+'">'+item.nome+'</option>');
和
for(var item in obj_campo.Key)
$("table.cadastro").append('<tr> <td> '+item.nome+' : </td> <td> <input type="text" name="'+item.nome+'" size=20 maxlenght=40> </td> <tr>');
但是我收到了文字&#39; undefined&#39;当我显示页面时,而不是正确的文本,尽管正在显示正确数量的itens。
有人知道如何解决这个问题吗?从我的json列表中访问每个项目的正确方法是什么?清单很好,对吗?
答案 0 :(得分:1)
正如@Oleg所说,它应该更像是:
var obj_tipo = jQuery.parseJSON( '{"Tipo":[{"id":3,"nome":"gerente"},{"id":4,"nome":"supervisor"},{"id":5,"nome":"analista"},{"id":6,"nome":"tecnico"},{"id":7,"nome":"secretaria"},{"id":8,"nome":"seguranca"}]}' );
var obj_campo = jQuery.parseJSON( '{"Key":[{"id":1,"nome":"e-mail"},{"id":2,"nome":"cidade"}]}' );
我基本上只是将包装引号更改为'
此外,如果您使用的是jQuery,您可能需要考虑使用 $。each 来循环使用JSON。请在此处查看此问题以获得一些说明:jquery loop on Json data using $.each
答案 1 :(得分:1)
在数组上使用for in
不是一个好主意。使用for (var i = 0; i < arr.length; i++) {...
或原生forEach
或jQuery的each
...
var obj = $.parseJSON('{"Tipo":[{...},{...},{...}]}'); // mind the quotes
$.each(obj.Tipo, function (index, item) {
select.append('<option value="' + item.nome + '">' + item.nome + '</option>');
});
答案 2 :(得分:0)
使用
for(var item in obj_tipo.Tipo) {
var nome= obj_tipo.Tipo[item].nome;
select.append('<option value="'+nome+'">'+ nome +'</option>');
}
而不是
for(var item in obj_tipo.Tipo)
select.append('<option value="'+item.nome+'">'+item.nome+'</option>');
有关详细信息,请访问for...in
变量:在每次迭代时为变量分配不同的属性名称。
答案 3 :(得分:0)
我对Java语言一无所知。但是你可以使用下面的代码片段来获取Nome和id字段。
请尝试使用以下代码段。如果有任何疑虑,请告诉我。
var tipo = obj_tipo.Tipo;
for(var i = 0; i < tipo.Length; i++)
{
select.append('<option value="'+tipo[i].id+'">'+tipo[i].nome+'</option>');
}
答案 4 :(得分:0)
代码中的项返回数组的索引。我更新了您的代码以获得解决方案。请找到fiddle here
$("table.cadastro").append('<tr> <td> '+obj_campo.Key[item].nome+' : </td> <td> <input type="text" name="'+obj_campo.Key[item].nome+'" size=20 maxlenght=40> </td> <tr>');
或
for(var item in obj_tipo.Tipo)
$('select').append('<option value="'+obj_tipo.Tipo[item].nome+'">'+obj_tipo.Tipo[item].nome+'</option>');