2015-04-02 80 views
1

我在解析字符串文字中的引號時出現問題。JSON解析字符串文字中的雙引號

var lit = '{"foo":"test \"1\"","bar":"test 2"}'; 

在控制檯中,這會給出一個錯誤'未捕獲的異常'。 我期待:

Object {foo: "test "1"", bar: "test 2"} 

這裏是我的小提琴https://jsfiddle.net/bruceradtke/kor8amm5/4/

如果我指定字符串化結果變量,然後 解析變量,它工作正常。但是,如果我像上面那樣使用字符串,則不行

謝謝。

我的代碼:

var myobject = {}; 
myobject.foo = "test \"1\""; 
myobject.bar = "test 2"; 

var sresult = JSON.stringify(myobject); 
console.log('stringify=' + sresult); 
// OK 
var thaw = JSON.parse(sresult); 
console.log(thaw); 

var lit = '{"foo":"test \"1\"","bar":"test 2"}'; 
console.log(lit); 
// Broken 
var thaw2 = JSON.parse(lit); 
+2

那是因爲你有一個JSON字符串**裏面面值**。在字符串文字中,\是轉義字符。所以如果你想產生一個文字\,你必須轉義它:\\。但爲什麼你首先要做到這一點?它只是用於測試嗎? – 2015-04-02 15:19:27

回答

7

記住你是在逃避兩個字符串值:一個用於聲明屬性,一個用於聲明變量(​​3210)。所以,你需要逃避你轉義字符:"test \\"1\\""

var lit = '{"foo":"test \\"1\\"","bar":"test 2"}'; 
 
console.log(lit); 
 

 
var thaw2 = JSON.parse(lit);

+0

這是正確的。 +1更新了OP的小提琴以防他/她:https://jsfiddle.net/kor8amm5/5/ – Seamus 2015-04-02 15:24:01