无法遍历json对象

时间:2011-10-24 17:51:00

标签: javascript jquery json

我正在使用以下代码构建一个json对象:

$.ajax({
        type: "POST",
        url: "/_layouts/WP/Handler.aspx/GetProductAssets",
        data: '{ "productId": "'+productcode+'" }',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (response) {
            var order = "";
            var data = response.d;
            var Groups = [];
            var json = [];
            $.each(data, function(key, value){
                if($.inArray(value.AssetType, Groups) == -1){
                    Groups.push(value.AssetType);
                    }

            });
            $.each(Groups, function(key, value){
                var groupassets = [];
                $.each(data, function(key2, value2){

                if(value2.AssetType == value)
                        groupassets.push(value2);
                });

                json.push("{'group': '" + value + "', 'assets': " + groupassets + "}");
            });
            alert(json);
            $.get('/common/js/assettemplate.htm', function (template) {
                 $('body').append(template);
                $("#assetTemplate").tmpl(json).appendTo("#support-download-results");
            });
        },

    });

在代码中创建并警告的json对象产生以下内容:

{'group': 'test', 'assets': [object Object]}, {'group': 'test2', 'assets': [object Object]}

当我尝试使用json[0].group进行访问时,我得到undefined。我没有正确访问或构建此json对象吗?我似乎无法得到任何数据的值,它们都是未定义的。

4 个答案:

答案 0 :(得分:1)

所以...你拥有的是两个JSON objs。您需要将它们包装在括号中,以便它们位于数组中。然后你可以说json [0] .group:

[{'group': 'test', 'assets': {}}, {'group': 'test2', 'assets': {}}]

答案 1 :(得分:0)

groupassets是一个不是字符串的对象。在调用json.push

之前,您必须对其进行字符串化

答案 2 :(得分:0)

您应该从Web服务返回的response.d并将其绑定到模板。你似乎在做了很多不必要的转换。

答案 3 :(得分:0)

您正在创建一个字符串数组。您无法访问json[0].group,因为jons[0]是字符串,字符串没有group属性。

只需将对象添加到数组中:

json.push({group: value, assets: groupassets})

正如我在评论中已经说过的,你可能不想要JSON,你创建的实际上并不是JSON。