2017-04-26 220 views
0

我想解析JSON到JS对象,但我有一个属性的问题,其中值始终包含“\”字符和四个字符后。例如。串看起来就像这样:如何避免解析JSON.parse()方法中的“”

"key": "Z13g\u003d" 

有一次,我分析它,我得到:

"key": "Z13g=" 

有没有简单的方法来解决这个问题?

+2

为什么是摆在首位的问题吗? '\ u003d'是一种可以在JSON字符串中表达'='的方法。也许你的问题无法在首先创建JSON时逃脱斜线? – Quentin

+2

'\ u003d'是表示JSON中'='字符的一种方式。解析器正确地完成它的工作。 – cdhowie

+0

@Quentin第一个例子是原始字符串的样子,然后是解析回javascript对象后的样子。 –

回答

1

如果您在JavaScript中使用了像“\ u003d”这样的字符串,则与其解析的字符串“=”无法区分。即使String.replace函数也不会在字符串中找到\字符。

但是,如果您确实想要表示包含反斜杠字符的字符串,则需要使用另一个反斜杠进行转义。

"\u003d"代表字符串值"=","\\u003d"代表字符串值"\u003d"

但是,当您调用JSON.parse时,事情会变得更加复杂;由于它再次解析字符串值,它会将"\\u003d"转换为"="

为了解决这个问题,你需要双重转义反斜杠,所以你将得到一个字符串值"\\\\u003d"。解析器会将其转换为"\u003d"而不是"="

console.log(JSON.parse("\"\u003d\"")); // "\u003d" -> "=" 
 
console.log(JSON.parse("\"\\u003d\"")); // "\\u003d" -> "=" 
 
console.log(JSON.parse("\"\\\\u003d\"")); // "\\\\u003d" -> "\u003d"