2017-04-26 212 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"