jQuery json 响应包含 \n \r
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/6116952/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
json response contains \n \r
提问by Sash
I'm working with ASP.NET and jQuery on client side.
我在客户端使用 ASP.NET 和 jQuery。
I'm using Json.NETto serialize data from the DB on the server side and I'm sending it to the client when an Ajax request arrives.
我正在使用Json.NET从服务器端的 DB 序列化数据,并在 Ajax 请求到达时将其发送到客户端。
When I open FireBug, I see the following json:
当我打开 FireBug 时,我看到以下 json:
{"d":"[\r\n {\r\n \"CategoryID\": 1,\r\n \"CategoryName\": \"a\",\r\n \"Description\": \"123\",\r\n \"CategoryType\": \"Personal\",\r\n \"Traits\": [\r\n {\r\n \"TraitID\": 1,\r\n \"TraitName\": \"a\",\r\n \"Description\": \"aaa\"\r\n },\r\n {\r\n \"TraitID\": 1,\r\n \"TraitName\": \"a\",\r\n \"Description\": \"aaa\"\r\n }\r\n ]\r\n },\r\n {\r\n \"CategoryID\": 1,\r\n \"CategoryName\": \"b\",\r\n \"Description\": \"bla bla\",\r\n \"CategoryType\": \"Professional\",\r\n \"Traits\": [\r\n {\r\n \"TraitID\": 1,\r\n \"TraitName\": \"a\",\r\n \"Description\": \"aaa\"\r\n },\r\n {\r\n \"TraitID\": 1,\r\n \"TraitName\": \"a\",\r\n \"Description\": \"aaa\"\r\n }\r\n ]\r\n },\r\n {\r\n \"CategoryID\": 1,\r\n \"CategoryName\": \"c\",\r\n \"Description\": \"123\",\r\n \"CategoryType\": \"Personal\",\r\n \"Traits\": [\r\n {\r\n \"TraitID\": 1,\r\n \"TraitName\": \"a\",\r\n \"Description\": \"aaa\"\r\n },\r\n {\r\n \"TraitID\": 1,\r\n \"TraitName\": \"a\",\r\n \"Description\": \"aaa\"\r\n }\r\n ]\r\n },\r\n {\r\n \"CategoryID\": 1,\r\n \"CategoryName\": \"d\",\r\n \"Description\": \"bla bla\",\r\n \"CategoryType\": \"Professional\",\r\n \"Traits\": [\r\n {\r\n \"TraitID\": 1,\r\n \"TraitName\": \"a\",\r\n \"Description\": \"aaa\"\r\n },\r\n {\r\n \"TraitID\": 1,\r\n \"TraitName\": \"a\",\r\n \"Description\": \"aaa\"\r\n }\r\n ]\r\n }\r\n]"}
My code from server side:
我的服务器端代码:
[WebMethod]
public static string LoadRatingForm()
{
bll_Trait t1 = new bll_Trait();
t1.TraitID = 1;
t1.TraitName = "a";
t1.Description = "aaa";
bll_Trait t2 = new bll_Trait();
t2.TraitID = 1;
t2.TraitName = "a";
t2.Description = "aaa";
bll_Trait t3 = new bll_Trait();
t3.TraitID = 1;
t3.TraitName = "a";
t3.Description = "aaa";
bll_Trait t4 = new bll_Trait();
t4.TraitID = 1;
t4.TraitName = "a";
t4.Description = "aaa";
bll_Category c1 = new bll_Category();
c1.CategoryID = 1;
c1.CategoryName = "a";
c1.CategoryType = "Personal";
c1.Description = "123";
c1.Traits.Add(t1);
c1.Traits.Add(t2);
bll_Category c2 = new bll_Category();
c2.CategoryID = 1;
c2.CategoryName = "b";
c2.CategoryType = "Professional";
c2.Description = "bla bla";
c2.Traits.Add(t3);
c2.Traits.Add(t4);
bll_Category c3 = new bll_Category();
c3.CategoryID = 1;
c3.CategoryName = "c";
c3.CategoryType = "Personal";
c3.Description = "123";
c3.Traits.Add(t1);
c3.Traits.Add(t2);
bll_Category c4 = new bll_Category();
c4.CategoryID = 1;
c4.CategoryName = "d";
c4.CategoryType = "Professional";
c4.Description = "bla bla";
c4.Traits.Add(t3);
c4.Traits.Add(t4);
List<bll_Category> list = new List<bll_Category>();
list.Add(c1);
list.Add(c2);
list.Add(c3);
list.Add(c4);
return JsonConvert.SerializeObject(list, Formatting.Indented);
}
My jQuery code:
我的jQuery代码:
$.ajax({
type: "POST",
url: "MyProfile.aspx/LoadRatingForm",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
var html;
var categories = response.d;
$.each(categories, function (i, category) {
// create
//while (category.CategoryType == "Professional") {
//
//}
html += category.CategoryName + " ";
});
dialog.append(html);
},
error: function () {
alert("ERROR");
}
});
The 'dialog' variable is a jQuery UI modal dialog and the $.ajax code is in the dialog's 'open' event handler...
'dialog' 变量是一个 jQuery UI 模态对话框,$.ajax 代码在对话框的 'open' 事件处理程序中...
What should I do to make the serialization result in a "correct" json format without any '\n', '\r' and '\' ?
我应该怎么做才能使序列化结果成为“正确”的 json 格式,而没有任何 '\n', '\r' 和 '\' ?
Thanks in advance!
提前致谢!
采纳答案by Dave Ward
You should not manually JSON serialize that List.
您不应该手动 JSON 序列化该列表。
ASP.NET is already doing it for you automatically when you call it via POST and use a content-type of application/json
. So, you're ending up with a doubly serialized response, and that is why you've found that you need to parse it a second time after jQuery has already parsed it once.
当您通过 POST 调用它并使用application/json
. 因此,您最终会得到一个双重序列化的响应,这就是为什么您发现在 jQuery 已经解析一次之后您需要再次解析它。
If you use a return type of List and return the list directly, you should be in good shape.
如果您使用 List 的返回类型并直接返回列表,您应该处于良好状态。
More info: http://encosia.com/2011/04/13/asp-net-web-services-mistake-manual-json-serialization/
更多信息:http: //encosia.com/2011/04/13/asp-net-web-services-mistake-manual-json-serialization/
回答by ColWhi
You could try return JsonConvert.SerializeObject(list, Formatting.None);
你可以试试 return JsonConvert.SerializeObject(list, Formatting.None);
Have you looked at this related question ASP.NET+jQuery, how to deSerialize JSON?. Might be something to do with the Content-Type header.
你看过这个相关的问题ASP.NET+jQuery, how to deSerialize JSON?. 可能与 Content-Type 标头有关。
EDIT: See comments, there was no parsing of the JSON.
编辑:查看评论,没有解析 JSON。
回答by z5h
According to the JSON spec: "Whitespace can be inserted between any pair of tokens."
根据 JSON 规范:“可以在任何一对令牌之间插入空格。”
So don't worry about it.
所以不用担心。
Or read about JSON formatting here http://james.newtonking.com/projects/json/help/ReducingSerializedJSONSize.html
或者在这里阅读有关 JSON 格式的信息http://james.newtonking.com/projects/json/help/ReducingSerializedJSONSize.html