使用\格式化JSON响应

时间:2012-04-04 14:06:20

标签: ajax json coldfusion jquery-autocomplete

我正在尝试格式化json响应:

[
{
    "id": "23029",
    "label": "F:\path\to\file\filename.txt",
    "value": "filename.txt"
},
{
    "id": "23030",
    "label": "F:\path\to\file\filename.txt",
    "value": "filename.txt"
},
{
    "id": "23031",
    "label": "F:\path\to\file\filename.txt",
    "value": "filename.txt"
}

但根据JSONLint,\正在打破“结构”?如果我用\替换\它工作,所以我知道\是问题。我正在使用jQuery's Autocomplete中的回复。

我应该使用SerializeJSON()吗?如果是这样,我是否需要在ajax自动完成脚本中更改某些内容?

$(function() {
    var cache = {},
        lastXhr;
    $( "#media" ).autocomplete({
        minLength: 2,
        source: function( request, response ) {
            var term = request.term;
            if ( term in cache ) {
                response( cache[ term ] );
                return;
            }

            lastXhr = $.getJSON( "ajax/search.cfm", request, function( data, status, xhr ) {
                cache[ term ] = data;
                if ( xhr === lastXhr ) {
                    response( data );
                }
            });
        }
    });
});

3 个答案:

答案 0 :(得分:8)

\是转义字符,如果它是内容的一部分,则需要自行转义。

因此,JSON字符串在客户端收到它之前应该是这样的:

[
    {
        "id": "23029",
        "label": "F:\\path\\to\\file\\filename.txt",
        "value": "filename.txt"
    },
    {
        "id": "23030",
        "label": "F:\\path\\to\\file\\filename.txt",
        "value": "filename.txt"
    },
    {
        "id": "23031",
        "label": "F:\\path\\to\\file\\filename.txt",
        "value": "filename.txt"
    }
]

答案 1 :(得分:8)

你试图逃避反斜杠吗?

{
"id": "23030",
"label": "F:\\path\\to\\file\\filename.ext",
"value": "filename.txt"
}

答案 2 :(得分:4)

虽然其他响应者已经指出你应该转义反斜杠,如果你 使用serializeJSON(),它会照顾你的转义。