迭代JSON列表导致"错误:语法错误,无法识别的表达式"

时间:2014-06-26 07:41:14

标签: jquery ajax json syntax

我有一个AJAX调用,它调用一个控制器。该控制器返回以下JSON:

{"officeProducts":"[{\"Id\":96,\"MyProperty\":null,\"Enabled\":true,\"Envelope\":{\"Id\":1,\"Quality\":\"God\",\"PaperSize\":\"A4\",\"Type\":\"Window\"}},{\"Id\":169,\"MyProperty\":null,\"Enabled\":true,\"Envelope\":{\"Id\":1,\"Quality\":\"God\",\"PaperSize\":\"A4\",\"Type\":\"Window\"}},{\"Id\":174,\"MyProperty\":null,\"Enabled\":true,\"Envelope\":{\"Id\":1,\"Quality\":\"God\",\"PaperSize\":\"A4\",\"Type\":\"Window\"}},{\"Id\":175,\"MyProperty\":null,\"Enabled\":true,\"Envelope\":{\"Id\":1,\"Quality\":\"God\",\"PaperSize\":\"A4\",\"Type\":\"Window\"}}]"}

现在我要迭代列表。所以我基本上想要迭代officeProducts

我有以下代码,我明显做错了,因为我得到了:

错误:

Error: Syntax error, unrecognized expression: [{"Id":96,"MyProperty":null,"Enabled":true,"Envelope":{"Id":1,"Quality":"God","PaperSize":"A4","Type":"Window"}},{"Id":169,"MyProperty":null,"Enabled":true,"Envelope":{"Id":1,"Quality":"God","PaperSize":"A4","Type":"Window"}},{"Id":174,"MyProperty":null,"Enabled":true,"Envelope":{"Id":1,"Quality":"God","PaperSize":"A4","Type":"Window"}},{"Id":175,"MyProperty":null,"Enabled":true,"Envelope":{"Id":1,"Quality":"God","PaperSize":"A4","Type":"Window"}}]

我的AJAX电话:

self.updateOfficeProducts = function() {
    $.ajax({
        url: '/SingleLetter/GetOfficeProducts',
        type: 'POST',
        data: {
            'country': self.countryId
        },
        dataType: 'json',
        success: function (data) {
            console.log(data.officeProducts);

            $(data.officeProducts).each(function (index, ele) {
               alert(ele.Id);
            });
        }
    });
};

所以我希望迭代4个不同的对象,我可以说ele.Idele.Enabled之类的东西。相反,我得到了语法错误。

我做错了什么? :-)显然是一些语法的东西。

1 个答案:

答案 0 :(得分:4)

使用JSON.parse -

success: function (data) {
    data = JSON.parse(data);
    $(data.officeProducts).each(function (index, ele) {
       alert(ele.Id);
    });
    ...

修改

另一件事 - 我不确定.NET,但你回复的反应不是ajax预期的形式。字符串没有正确地进行json编码。

您必须在"[之前和之后删除],因此字符串将为 -

var a = '{"officeProducts": [{\"Id\":96,\"MyProperty\":null,\"Enabled\":true,\"Envelope\":{\"Id\":1,\"Quality\":\"God\",\"PaperSize\":\"A4\",\"Type\":\"Window\"}}] }';
//                         ^here                                                                                                                           and here^        

JSFiddle

希望有所帮助。