【发布时间】:2015-06-30 20:04:13
【问题描述】:
我正在使用 GSON 将 List(Map(String,String)) 转换为 json 字符串并通过会话将其传递给前端。 GSON 正确地使用 /" 转义了双引号,但是在解析 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"}]}]';
我无法找到在 " 之前添加 \\ 以使行为正常工作的方法。我正在尝试使用 java 和 javascript。
我在 javascript 中尝试做的是在 cmets 的上述小提琴中
我在java中尝试做的是 str.replaceAll("\"", "\\\\\\")); 它使用 \\\"
请让我知道有什么办法可以纠正这个问题或者我做错了什么。
谢谢。
【问题讨论】:
-
你为什么需要使用
JSON.parse()? this is what I mean -
当您在 javascript 中按字面意思编写字符串时,您需要对其进行双重转义,一个用于 javascript 解析器,一个用于 JSON 解析器。
-
嗨 Pointy 我正在使用 parse 将字符串转换为 JSON 对象,以便我可以对其进行解析并对其进行迭代。嗨,Adeneo,即使我直接从服务器获取字符串,它的行为方式也是一样的。我正在使用类似这样的东西来填充 JSP var jsonStr = ''; 中的变量
-
这就像字面意思一样,因为服务器把它写成文字字符串
-
Pointy 是有道理的,为什么不把它写成一个对象呢,javascript 支持,不需要引号。
标签: java javascript jquery json gson