在js處理由api返回的json數據時提示Unexpected token ILLEGAL錯誤了,於直接輸出js發現有換行了,這個就簡單了。
事情是醬事兒的,某接口返回結果是JSON數據,我這邊處理一番返回給頁面JS。但是吧,JS在處理JSON的時候報了這個錯誤:Unexpected token ILLEGAL,導致中止。
網上找了一番,自己試了一番,於是總結一番。
返回的結果是醬事兒的:
代碼如下 復制代碼{"status":"1","info":{"date":"2013-12-01","content":"1、測試內容1
2、測試內容2
3、測試內容3
4、測試內容4
5、測試內容5"}}
直接整的話會報上面說的錯誤。但是直接把換行去掉又不合適,所以就這麼整了一下:
$response =~ s/r/\r/g;
$response =~ s/n/\n/g;
也就是把返回結果裡的換行轉換為“\r\n”給到JS裡,然後JS接收到的就是rn了。
測試一下json類的處理,也沒有發現。想不到最終的處理確實如此簡單:
後台代碼把換行符rn替換為\r\n,前台代碼js收到的字符就是rn
public static string ConvertFromListTojson<T>(IList<T> list, int total, string columnInfos) where T : class
{
string[] cols = columnInfos.Split(new char[]{','},StringSplitOptions.RemoveEmptyEntries);
StringBuilder sb = new StringBuilder(300);
sb.Append("{"total":");
sb.Append(total);
sb.Append(","rows":");
sb.Append("[");
foreach (T t in list)
{
sb.Append("{");
foreach (string col in cols)
{
string name = ""{0}":"{1}",";
string value = getValue<T>(t, col);
value = value.Replace("rn", "\r\n");
sb.Append(string.Format(name, col, value));
}
if (cols.Length > 0)
{
int length = sb.Length;
sb.Remove(length - 1, 1);
}
sb.Append("},");
}
if (list.Count > 0)
{
int length2 = sb.Length;
sb.Remove(length2 - 1, 1);
}
sb.Append("]");
sb.Append("}");
return sb.ToString();
}
private static string getValue<T>(T t, string pname) where T : class
{
Type type = t.GetType();
PropertyInfo pinfo = type.GetProperty(pname);
if (pinfo != null)
{
object v = pinfo.GetValue(t, null);
return v != null ? v.ToString() : "";
}
else
{
throw new Exception("不存在屬性" + pname);
}
}