JSON算法,不一致?

时间:2015-05-19 08:51:24

标签: javascript json database

在谷歌浏览器中,我试过这个:

我在javascript中有一个对象,例如,

var b = {
    text: 'hello world, you "cool"'
};

然后我使用JSON.stringify将其转换为字符串,并在db中发送到db,它将如下所示:

{"text":"hello world, you \"cool\""}

然后我从服务器上的db获取它,并尝试发送回js然后解析它,当然它是一个有效的JSON字符串,但用这种方式通过服务器脚本语言将它传递给javascript:

"javascript:loadText(' + str + ')"...

其中loadText是一个javascript函数:

function loadText(val) {

   console.log(JSON.parse(val));
}

我们会收到错误,但如果我们只在javascript中尝试其他方式,则不会出现此错误:

var b = {
    text: 'hello world, you "cool"'
};

console.log(JSON.parse(JSON.stringify(b)));

是因为JSON字符串化/解析算法?

PS:

这也是错误的:

loadText('{"text":"hello world, you \"cool\""}');

2 个答案:

答案 0 :(得分:0)

请勿尝试通过查看服务器端代码来调试JavaScript错误。

看看你正在生成的JS。

"javascript:loadText(' + str + ')"

会给你一些类似的东西:

"javascript:loadText({"text":"hello world, you \"cool\""})"

所以你有一个JavaScript对象文字,而不是一个JSON字符串。

您必须使用引号包装数据并转义任何特殊字符,以便在将其嵌入JS时将其保留为JSON。

根据位置,您应该对其进行URL编码。

答案 1 :(得分:0)

您的"javascript:loadText(' + str + ')"确实试图将文字+ str +传递给loadText

您可以修改引文或间接制作'

javascript:loadText(String.fromCharCode(39) + str + String.fromCharCode(39))