Javascript 如何将此Json数组转换为JQuery可读的格式?

Javascript 如何将此Json数组转换为JQuery可读的格式?,javascript,jquery,ajax,json,asp.net-mvc-3,Javascript,Jquery,Ajax,Json,Asp.net Mvc 3,这是一个模糊的问题,但我不确定如何才能让它工作。Firebug说我的ajax请求中的Json对象(数组?)如下所示: { "jsonResult": "[ {\"OrderInList\":1}, {\"OrderInList\":2} ]" } 这是通过$.getJSON ajax请求检索的: $.getJSON(“/Json/GetOrderSelectList?parentCategoryId=“+postData,testData,函数(jsonResult)){ $('

这是一个模糊的问题,但我不确定如何才能让它工作。Firebug说我的ajax请求中的Json对象(数组?)如下所示:

{
"jsonResult":
"[
   {\"OrderInList\":1},
   {\"OrderInList\":2}
]"
}
这是通过$.getJSON ajax请求检索的:

$.getJSON(“/Json/GetOrderSelectList?parentCategoryId=“+postData,testData,函数(jsonResult)){
$('#orderInList选项')。删除();
变量映射={
“TestKey1”:“TestValue1”,
“TestKey2”:“TestValue2”
};
$.each(jsonResult,函数(键,值){
$(“#orderInList”)。追加($(“”+value+“”)
);
});
如果我将$.each(jsonResult)替换为$.each(map),则选择列表将正确填充。否则,我的选择列表只显示“未定义”

我在MVC控制器中序列化此操作中的Json:

    public JsonResult GetOrderSelectList(int parentCategoryId)
    {
        var result = Session
            .QueryOver<Category>()
            .Where(x => x.Parent.Id == parentCategoryId)
            .OrderBy(x => x.OrderInList).Asc
           .List();

        var toSerialize =
            result.Select(r => new {r.OrderInList});

        var jsonResult = JsonConvert.SerializeObject(toSerialize);                             
        return Json(new
                        { jsonResult,
                        }, JsonRequestBehavior.AllowGet);

    }
公共JsonResult GetOrderSelectList(int-parentCategoryId) { var结果=会话 .QueryOver() .Where(x=>x.Parent.Id==parentCategoryId) .OrderBy(x=>x.OrderInList).Asc .List(); 变量系列化= 选择(r=>new{r.OrderInList}); var jsonResult=JsonConvert.SerializeObject(toSerialize); 返回Json(新的 {jsonResult, },JsonRequestBehavior.AllowGet); } 因此,我认为问题可能在于操作响应的Json格式?感谢您的帮助

编辑答案

下面的两个答案对我都有帮助。我似乎无法强式键入变量jsonResult,因此感谢@JBabey指出我在读取json属性时的错误,并在$.each语句中建议函数(key,value)


感谢@Darin Dimitrov帮助整理我的控制器!

您将ajax返回的数据属性与数据本身混淆。
$。如果您更正此问题,每个
都可以正常工作

返回的数据如下所示:

{
    "jsonResult": "[
        {\"OrderInList\":1},
        {\"OrderInList\":2}
    ]"
}
[{"Id": 1, "Value": "some value"}, {"Id": 2, "Value": "some other value"}]
这意味着这是传递给success函数的对象。将其称为
data
,而不是
jsonResult

function (data) {
    ...
    $.each(data.jsonResult, function (key, value) {
        ...
    });
});

此外,您的数组是以字符串形式出现的,因此您可能需要在
$之前对其进行解析。每个
都可以对其进行迭代。

您将ajax返回的数据的属性与数据本身混淆。
$。如果您纠正这一点,每个
都可以正常工作

返回的数据如下所示:

{
    "jsonResult": "[
        {\"OrderInList\":1},
        {\"OrderInList\":2}
    ]"
}
[{"Id": 1, "Value": "some value"}, {"Id": 2, "Value": "some other value"}]
这意味着这是传递给success函数的对象。将其称为
data
,而不是
jsonResult

function (data) {
    ...
    $.each(data.jsonResult, function (key, value) {
        ...
    });
});

此外,您的数组是以字符串的形式出现的,因此您可能需要在
$之前对其进行解析。每个
都可以对其进行迭代。

您的控制器操作是错误的。您在其中手动进行JSON序列化,然后将其作为JSON结果返回,从而以双重JSON序列化结束。您可以直接返回数组和le将JSON序列化管道保存到ASP.NET MVC框架:

public ActionResult GetOrderSelectList(int parentCategoryId)
{
    var result = Session
        .QueryOver<Category>()
        .Where(x => x.Parent.Id == parentCategoryId)
        .OrderBy(x => x.OrderInList)
        .Asc
        .List();
    return Json(result, JsonRequestBehavior.AllowGet);
}

您必须根据实际的
类别
模型调整这些属性名称。

您的控制器操作错误。您在其中手动进行JSON序列化,然后将其作为JSON结果返回,从而以双重JSON序列化结束。您可以直接返回数组并保留JSON序列化o ASP.NET MVC框架:

public ActionResult GetOrderSelectList(int parentCategoryId)
{
    var result = Session
        .QueryOver<Category>()
        .Where(x => x.Parent.Id == parentCategoryId)
        .OrderBy(x => x.OrderInList)
        .Asc
        .List();
    return Json(result, JsonRequestBehavior.AllowGet);
}

您必须根据实际的
类别
模型调整这些属性名称。

这看起来很不错,但现在我收到了一个关于循环引用的500错误(您以前不可能知道)。当我添加.Select(x=>x.OrderInList)时对于查询,我得到了一个关于parentCategoryId.Where语句的不同错误:“值“1”不是“cumbriand.Domain.Category”类型,不能用于此泛型集合。
参数名称:值”hrrrm!我想这就是为什么我在创建查询后首先使用linq表达式的原因。您在哪里添加
.Select
子句?它是在linq查询的末尾,就在
.List
方法调用之后吗?这看起来很不错,但是现在我收到一个关于循环引用的500错误(这是您以前不可能知道的)。当我向查询添加.Select(x=>x.OrderInList)时,我得到一个关于parentCategoryId.Where语句的不同错误:“值“1”不是“Cumbriand.Domain.Category”类型,不能在此通用集合中使用。
参数名称:值”hrrrm!我想这就是为什么我在创建查询后首先使用linq表达式的原因。您在哪里添加
.Select
子句?它是否在linq查询的末尾,就在
.List
方法调用之后?