JSON字符串中的双引号转义,在解析时导致错误

时间:2015-04-22 22:11:22

标签: java javascript jquery json gson

我正在使用GSON将List(Map(String,String))转换为json字符串并通过会话将其传递给前端。 GSON通过/"正确地逃避双重qoutes但解析json字符串时问题就出现了。

生成的JSON字符串是

[{"queueList": [{"Name": "Queue\"1\""}, {"Name": "Queue2"}, {"Name": "Queue3"}, {"Name": "Queue4"}]}]

错误我在解析时遇到chrome:" UnExpected Number"

我用来解析的代码如下

 $(document).ready(function () {
var menuItemsStr = '[{"queueList": [{"Name": "Queue\"1\""}, {"Name": "Queue2"}, {"Name": "Queue3"}, {"Name": "Queue4"}]}]';
var menuItems = $.parseJSON(menuItemsStr);
$.each(menuItems[0].queueList, function (idx, obj) {
    var listItemHTML = $("#listItem").clone().html();
    listItemHTML = listItemHTML.replace(/\@QN/g, obj.Name);

    $("#list").append(listItemHTML);
});
});

以下是上述代码与问题一起出现的小提琴链接 http://jsfiddle.net/vinaybvk/qvwL9246/2/

当JSON字符串具有\\"然后上面的小提琴按预期工作正常。
工作转义的JSON字符串如下:

var menuItemsStr = '[{"queueList": [{"Name": "Queue\\"1\\""}, {"Name": "Queue2"}, {"Name": "Queue3"}, {"Name": "Queue4"}]}]';

我无法在#34之前找到添加\\的方法。让行为发挥作用。我在java和javascript中都尝试过。
我在javascript中尝试做的是在评论中的上述小提琴
我在java中尝试做的是str.replaceAll(" \""," \\\\\"));用\\\"

生成字符串

请告诉我有没有办法纠正这个问题,或者我做错了什么。

感谢。

1 个答案:

答案 0 :(得分:2)

不是引用字符串然后解析它,在这种情况下你可以这样做:

var menuItems = <s:property value="#session['jsonFormattedResult']" escapeHtml = "false" />;

会产生有效的对象。