我必须将ü这样的字符作为unicode字符发送到服务器,但必须是ASCII安全的字符串,所以它必须是\u00fc(6个字符),而不是字符本身,但在JSON.stringify之后,无论我对它做了什么,它总是得到ü。如果我使用2个反斜杠,比如\\u00fc,那么在JSON字符串中也会得到2,这也不好。
\u00fc
JSON.stringify
\\u00fc
JSON
重要限制:我不能修改JSON.stringify后面的字符串,它是框架的一部分,没有解决方案,我们不想派生整个包。
这可以做到吗?如果可以,怎么做?
5gfr0r5j1#
如果出于某种原因,您希望JSON是ASCII安全的,请在json编码后替换非ASCII字符:
var obj = {"key":"füßchen", "some": [1,2,3]} var json = JSON.stringify(obj) json = json.replace(/[\u007F-\uFFFF]/g, function(chr) { return "\\u" + ("0000" + chr.charCodeAt(0).toString(16)).substr(-4) }) document.write(json); document.write("<br>"); document.write(JSON.parse(json));
d7v8vwbk2#
这应该会让你达到你想要的目的。我很大程度上是基于这个问题:Javascript, convert unicode string to Javascript escape?
var obj = {"key":"ü"}; var str1 = JSON.stringify(obj); var str2 = ""; var chr = ""; for(var i = 0; i < str1.length; i++){ if (str1[i].match(/[^\x00-\x7F]/)){ chr = "\\u" + ("000" + str1[i].charCodeAt(0).toString(16)).substr(-4); }else{ chr = str1[i]; } str2 = str2 + chr; } console.log(str2)
不过我建议你看看关于解析这个服务器端的@t.niese注解。
waxmsbnn3#
根据具体的场景,您可以通过提供toJSON方法来影响JSON.stringify的行为,如下所述:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#tojson_behavior如果一个对象的toJSON方法是一个函数,那么调用JSON.stringify将使用该方法的结果,而不是常规的序列化。您可以将此方法与其他答案中提到的方法结合起来,以获得您想要的结果,即使库本身并不提供任何用于定制的钩子。(Of当然,也有可能是第三方库本身在做一些覆盖此行为的事情。)
toJSON
3条答案
按热度按时间5gfr0r5j1#
如果出于某种原因,您希望JSON是ASCII安全的,请在json编码后替换非ASCII字符:
d7v8vwbk2#
这应该会让你达到你想要的目的。我很大程度上是基于这个问题:Javascript, convert unicode string to Javascript escape?
不过我建议你看看关于解析这个服务器端的@t.niese注解。
waxmsbnn3#
根据具体的场景,您可以通过提供
toJSON
方法来影响JSON.stringify的行为,如下所述:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#tojson_behavior如果一个对象的
toJSON
方法是一个函数,那么调用JSON.stringify
将使用该方法的结果,而不是常规的序列化。您可以将此方法与其他答案中提到的方法结合起来,以获得您想要的结果,即使库本身并不提供任何用于定制的钩子。(Of当然,也有可能是第三方库本身在做一些覆盖此行为的事情。)