如何将带双引号的字符串返回到客户端脚本,将其解析为JSON对象?

时间:2012-07-27 17:25:33

标签: javascript json escaping

我有一个由JavaScript调用的WebMethod,用于从数据库中获取数据。数据库没有限制,所以我无法改变任何东西。我想在JavaScript中这样做。

当它到达JavaScript时,字符串看起来像这样:

"[{"id":"0", "value":"Avery Bradley"},{"id":"31", "value":"Jason "Jet" Terry"}]"

我已尝试替换('\"', '\\\"')以添加转义字符。我通过Replace("\"", "\\\"")方式在.NET端工作。但是,这是一个自包含的控件,它将使用它并且验证应该在那里。

我做错了什么?

function GetDataCallBack(childId,senderParam,senderValue,callback){     var值;

$.ajax({
    type: "POST",
    async: false,
    url: callback,
    data: "{'id': '" + childId + "', 'parameter': '" + senderParam + "', 'value': '" + senderValue + "'}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (json) {
        values = json.d;
    }
});
return values;

}

2 个答案:

答案 0 :(得分:1)

问题出在服务器端。它提供无效的JSON。具体来说,这是在数组中的最后一个对象内部:

"value":"Jason "Jet" Terry"

"Jet"周围的引号需要转义。服务器为您提供无效的JSON。

您可以尝试纠正损坏的JSON,但它会很糟糕并且可能不完美。

需要修复服务器端,以便它提供有效的JSON。

答案 1 :(得分:0)

我认为你在这里做错了什么。 JSON文件应该只是JSON而不是其他内容。它不应该是JSON的字符串表示形式,它被字符串解析为字符串,并从那里解析为Object - 只需将文件/流/其他内容视为字符串。

如果需要将JSON嵌入到某个标记(XML,HTML)中,请在JSON字符串上使用该语言的指定转义方法。

如果需要将JSON嵌入到某个程序文件中,请尝试使用编码对象的匹配文字表示(例如,在Javascript中非常容易)。如果您使用的语言没有良好的表现形式,请将其存储在额外的文本文件中并从那里读取。