Невозможно выполнить итерацию через объект json

#javascript #jquery #json

#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? Кажется, я не могу получить какое-либо из значений данных, все они отображаются как неопределенные.

Комментарии:

1. Я думаю, вы вообще не хотите создавать JSON…. Я думаю, вам следует создать объект JavaScript.

2. Кажется, вы перебираете объект JSON для создания другого объекта JSON — могу я спросить, почему?

3. Если бы ваша переменная json была массивом, содержащим два объекта, при ее оповещении () вы бы увидели «[object Object], [object Object]» и все.

Ответ №1:

итак … у вас есть два объекта JSON. Вам нужно заключить их в скобки, чтобы они были в массиве. Тогда вы можете сказать json[0].group:

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

Ответ №2:

groupassets является объектом, а не строкой. Вам придется преобразовать его в строку перед вызовом json.push

Ответ №3:

Вы должны принять ответ.d, возвращенный из вашего веб-сервиса, и привязать его к шаблону. Кажется, вы делаете много ненужных преобразований между ними.

Ответ №4:

Вы создаете массив строк. Вы не можете получить доступ json[0].group , потому jons[0] что это строка, а строки не имеют group атрибута.

Просто добавьте объекты в массив:

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

Как я уже говорил в своем комментарии, вам, вероятно, не нужен JSON, и то, что вы создаете, на самом деле не JSON.