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

问题描述:

这是一个模糊的问题,但我不确定该如何工作。萤火虫说,从我的Ajax请求的JSON对象(数组?)是这样的:如何将此Json数组转换为JQuery可读的格式?

{ 
"jsonResult": 
"[ 
    {\"OrderInList\":1}, 
    {\"OrderInList\":2} 
]" 
} 

这是通过$ .getJSON Ajax请求通过检索:

$.getJSON("/Json/GetOrderSelectList?parentCategoryId=" + postData, testData, function (jsonResult) { 
     $('#orderInList option').remove(); 

     var map = { 
      "TestKey1": "TestValue1", 
      "TestKey2": "TestValue2" 
     }; 

     $.each(jsonResult, function (key, value) { 
      $("#orderInList").append($("<option value=" + key + ">" + value + "</option>") 
      ); 
     }); 

如果我更换$。每个( jsonResult)与$ .each(地图)选择列表正确填充。否则,我的选择列表只会说'未定义'。

序列化JSON的这个动作在我的MVC控制器:

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); 

    } 

所以我觉得问题可能的Json的行动与回应格式?任何帮助感谢!下面

编辑答案为

的答案都帮助了我。我似乎无法强烈地键入变量jsonResult,所以感谢@JBabey指出了我在阅读json属性时的错误,并在$ .each语句中建议了函数(键,值)。

感谢@Darin Dimitrov帮助排序我的控制器!

您的控制器操作错误。你手动JSON序列化,然后返回这个作为JSON结果,从而结束了一个双JSON序列化。您可以直接返回数组和离开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); 
} 

然后:

$.getJSON("/Json/GetOrderSelectList?parentCategoryId=" + postData, testData, function (jsonResult) { 
    $('#orderInList option').remove(); 
    $.each(jsonResult, function() { 
     $('#orderInList').append(
      $("<option value=" + this.Id + ">" + this.Value + "</option>") 
     ); 
    }); 
}); 

请注意,我用的this.Idthis.Value这里。这假定JSON结果如下:

[{"Id": 1, "Value": "some value"}, {"Id": 2, "Value": "some other value"}] 

你将不得不适应根据您的实际Category模型的属性名称。

+0

这看起来真的很不错,但现在我收到了一个关于循环引用的500错误(您之前无法知道这个错误)。当我添加一个.Select(x => x.OrderInList)给查询时,我得到了一个关于我的parentCategoryId的不同的错误。Where语句:“值”1“不是”CumbriaMD.Domain.Category“类型,不能用于此泛型集合。
参数名称:值”hrrrm!我认为这就是为什么在首先创建我的查询之后使用linq表达式的原因。 – Kiada 2012-08-12 16:34:23

+0

你在哪里添加'.Select'子句?在'.List'方法调用之后,它是否在LINQ查询的末尾? – 2012-08-12 16:37:47

+0

谢谢,让它现在工作:) – Kiada 2012-08-12 16:53:26

你正在混淆你的ajax返回的数据属性和数据本身。如果你改正了这个问题,$.each会正常工作。

你返回的数据看起来像这样:

{ 
    "jsonResult": "[ 
     {\"OrderInList\":1}, 
     {\"OrderInList\":2} 
    ]" 
} 

这意味着是传递给你的成功函数的对象。将其称为data而不是jsonResult

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

此外,您的阵列来了通过为字符串,所以你可能需要解析它之前$.each将能够重复它。