Javascript JSON算法,不一致?

Javascript JSON算法,不一致?,javascript,json,database,Javascript,Json,Database,在google chrome中,我尝试了以下方法: 例如,我有一个javascript对象 var b = { text: 'hello world, you "cool"' }; 然后我使用JSON.stringify将其转换为字符串,并发送到db,在db中,它将如下所示: {"text":"hello world, you \"cool\""} 然后我从服务器上的db获取它,并尝试发送回js,然后对其进行解析,当然这是一个有效的JSON字符串,但通过这种方式通过服务器脚本语言将其

在google chrome中,我尝试了以下方法:

例如,我有一个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字符串化/解析算法吗

附言:

这也是错误的:

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

不要试图通过查看服务器端代码来调试JavaScript错误

看看你正在生成的JS

"javascript:loadText(' + str + ')"
会给你一些类似的东西:

"javascript:loadText({"text":"hello world, you \"cool\""})"
因此,您有一个JavaScript对象文本,而不是一个JSON字符串

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

给定位置,您也应该对其进行URL编码。

您的
“javascript:loadText('+str+')”
正试图将文本
+str+
传递到
loadText

您可以修正您的报价,也可以间接地修改
s:

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

不是那么简单,即使你有loadText(“{”text:“你好,世界,你\”酷\“}”);它仍然错误并抛出错误。@Tom确定您也需要转义
\
loadText(“{”text:“你好,你\\\\\\\\\”}”)
你需要两个符号
\和“
”,而
\“
-是一个符号。请尝试
'''='\'''
@YuryTarabanko是的,这是真的,实际上我们需要\\“not\”,但混淆的部分是,字符串是有效的JSON,但无法从JSON.parse()@Tom获得正确的结果-当它通过HTML和JavaScript解析器时,它不是有效的JSON。@Mr.Liama谢谢,还有,你对此的看法,JSON.parse(“{”text:“你好世界,你\“酷\”),这也是一个错误,除非JSON.parse(“{”text:“你好世界,你\“酷\\”}”),我对此很好奇,因为算法是这样做的……如果您手动输入字符串,那么是的,您需要转义
\
s,否则它们将被删除。要帮助解释它,请尝试执行:
var str='{“text”:“hello world,you\'cool\\”};console.log(str)
。你会明白为什么它不起作用。@Mr.LIama谢谢,明白你的意思了,JSON.parse中字符串中的\“与”相同,但是当我们在jsonlint中使用字符串时,它将\视为字符,所以它是有效的,但实际上在表达式中不是相同的。