JSON转义了jqGrid中的字符

时间:2014-06-06 09:30:09

标签: javascript jquery json jqgrid apostrophe

对不起..我知道我会被指责提出一个之前已被问过很多次的问题,但是我拼命搜索,用Google搜索并尝试了各种建议,但是没有什么对我有用。

我有一个服务返回一些带有撇号的JSON数据。所以" Mike's example record"像这样返回:

{
    "Results": [
    {
        "ID": 139,
        "Name": "Mike\u0027s example record",
        "CedentName": "Mikes Business Partner"
    }],
    "Success": "1"
}

我想知道的是,如何让jqGrid将此\u0027代码转换回撇号。

enter image description here

我知道,我知道,这一定是一个明显的设置,但我搜索过,谷歌搜索,尝试添加 对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中查看我的数据,而不需要格式化器。

1 个答案:

答案 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中看到撇号:

enter image description here

但是必须有更清洁的方法来做到这一点......?