对不起..我知道我会被指责提出一个之前已被问过很多次的问题,但是我拼命搜索,用Google搜索并尝试了各种建议,但是没有什么对我有用。
我有一个服务返回一些带有撇号的JSON数据。所以" Mike's example record
"像这样返回:
{
"Results": [
{
"ID": 139,
"Name": "Mike\u0027s example record",
"CedentName": "Mikes Business Partner"
}],
"Success": "1"
}
我想知道的是,如何让jqGrid将此\u0027
代码转换回撇号。
我知道,我知道,这一定是一个明显的设置,但我搜索过,谷歌搜索,尝试添加
对jqGrid datatype
属性的函数,依此类推,但没有任何效果。
这是我用来加载JSON数据的代码,并填充jqGrid:
$("#tblCustomers").jqGrid({
url: '/JSON/GetCustomers.aspx',
contentType: "application/json; charset=utf-8",
datatype: "json",
viewrecords: true,
loadonce: true,
jsonReader: {
root: "Results", //arry containing actual data
id: "ID", //index of the column with the PK in it
repeatitems: false
},
. . .
. . .
autoencode: true,
caption: ""
});
另一个问题:出于兴趣,我添加了另一条带有语音标记的记录。
奇怪的是,JavaScriptSerializer()
函数产生了无效的JSON,然后,jqGrid中没有显示任何内容!!
string JSON = new JavaScriptSerializer().Serialize(listOfRecords).ToString();
生成以下无效的 JSON字符串。
注意没有将语音标记编码为\u0022
:
{
"Results": [
{
"ID": 140,
"Name": "Mikes \\"Speechmark test\\" RP",
"CedentName": "Mikes Cedent"
},
我不能成为唯一注意到这个怪癖的人,我可以......?
过了一会儿......
阅读this article并查看JavaScriptSerializer()
格式日期后,使用Microsoft自己不支持的格式:
StartDate: "\/Date(1401573600000)\/",
..我意识到JavaScriptSerializer()
非常讨厌,并将其替换为JSON.Net。
奇怪的是,这个类也在序列化包含语音标记的值时失败了,并且愉快地创建了无效的JSON字符串(它具有与上面所示相同的错误格式,中间留有一个语音标记(场值)。
但是,至少只留下撇号,所以我可以在jqGrid中查看我的数据,而不需要格式化器。
答案 0 :(得分:0)
这是我找到答案的最接近的事情。
您可以将格式化程序应用于网格中的每个单元格,以强制它解析JSON值,这会将\u0027
转义码转换回撇号。
function formatCell(cellValue, options, rowdata, action) {
return JSON.parse("\"" + cellValue + "\"");
}
然后将此格式化程序添加到jqGrid中的每列:
$("#tblCustomers").jqGrid({
url: '/JSON/GetCustomers.aspx',
contentType: "application/json; charset=utf-8",
datatype: "json",
colModel: [
{ name: "ID", width: 70, align: "center", formatter: formatCell },
{ name: "Name", search: true, width: 290, formatter: formatCell },
{ name: "CedentName", search: true, width: 290, formatter: formatCell }
],
. . .
这确实有效,我终于可以在我的jqGrid中看到撇号:
但是必须有更清洁的方法来做到这一点......?