尝试访问json列表时显示文本“未定义”

时间:2014-04-08 09:33:23

标签: javascript jquery json

在我项目的一个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列表中访问每个项目的正确方法是什么?清单很好,对吗?

5 个答案:

答案 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>');