2012-11-28 39 views
4

我是JavaScript新手,因此瞭解這些東西的一些工作原理。對JSON字符串數組的JSON.parse效果不如預期

我有一個字符串,它看起來像:["{\"name\":\"name\"}","{\"name\":\"Rick\"}"]

如果我JSON.parse()來認爲它不應該返回有名稱的屬性對象的數組?

我得到的是數組中的2個元素,但它們只是JSON字符串。它們不是具有屬性名稱的對象。我錯過了什麼?

[編輯] 我在對象上調用stringify(),然後將它傳遞給數組,而不是僅僅傳遞對象到數組。然後我stringify()數組。我是stringify一個stringify導致它把轉義字符:)

+0

提示,備用如果是的'’在字符串中」 ''或''''分別。即''[{「name」:「name」},{「name」:「Rick」}]'' – Neil

回答

6

如果我JSON.parse(),它不應該返回一個具有名稱屬性的對象數組?

不,看起來JSON定義了一個數組,其中包含兩個字符串。

這是它與兩個字符串數組的JSON:

[ 
    "{\"name\":\"name\"}", 
    "{\"name\":\"Rick\"}" 
] 

在JavaScript字符串文字的形式,這是'["{\"name\":\"name\"}","{\"name\":\"Rick\"}"]'

這是JSON在它與兩個對象的數組:

[ 
    { 
     "name": "name" 
    }, 
    { 
     "name": "Rick" 
    } 
] 

在JavaScript字符串文字形式,那將是'[{"name":"name"},{"name":"Rick"}]'

+0

這很奇怪,因爲我沒有手動添加這些轉義字符。當我stringify()數組時,它們似乎被自動添加。在Win 8上使用IE 10測試。 – user441521

+0

tmp.push(JSON.stringify(data));數據是一個對象。 tmp看起來很正常。它包含JSON字符串的1個元素,並且在VS中視覺上看起來很正常。調用localStorage.setItem(tbl.name,JSON.stringify(tmp))後;並在localStorage看它現在有逃生字符。 – user441521

+0

@ user441521:無論你在看什麼字符串,我都希望這樣做。例如,在Chrome的控制檯中,'JSON.stringify([{「foo」:「bar」}])'outputs'「[{」foo「:」bar「}]''(注意它是如何在字符串周圍加引號,但不能在字符串中轉義引號,如果您複製並粘貼它,則會出錯)。 'JSON.stringify'正常工作在IE9([示例](http://jsbin.com/owexuf/1)),我看不出有任何理由認爲它不會對IE10正常工作。希望這有助於, –

0

如果你失去了根元素周圍的引號,你可能會得到你想要的。

E.g.像

"[{"name":"name"},{"name":"Rick"}]" 
+0

雖然這不正確。 – Neil

2

我猜它sholuld前來爲:「「字符,你沒有逃跑,」或‘

"[{\"name\":\"name\"},{\"name\":\"Rick\"}]" 
相關問題