2014-01-15 72 views
1

我有代碼JS:字符串轉換成目標

data = "{isShowLoginPopup:true,newFavOfferId:1486882}"; 

我想把它轉換成JS對象(不是JSON),並以這種方式使用它:

data.newFavOfferId = ... 

我該怎麼辦這個?

回答

2

如果你的來源是可信的,最簡單的解決方案是使用eval

data = eval('('+data+')'); 

如果您不信任的來源,那麼你最好註明你能有什麼和手動解析字符串(例如,如果您只有一個屬性級別,則不會非常困難)。

另一種解決方案(根據您的實際數據)將通過插入缺失報價更改您的數據轉換成JSON:

data = JSON.parse(datareplace(/({|,)\s*([^:,}{]+)\s*(:)/g,'$1"$2"$3')); 
+0

我想起老的JavaScript的話說:「評估和演示是邪惡的」 – series0ne

+0

由於大部分的說法,這是一部分的智慧和愚蠢的一部分。你必須知道何時使用它。當你知道你投入什麼時,主要的問題是它很慢。 –

1

只是刪除引號

data = { 
    isShowLoginPopup:true, 
    newFavOfferId:1486882 
}; 

小提琴:http://jsfiddle.net/QpZ4j/

+1

'data'的內容來自sever我無法修改它,我想將它轉換爲 – Jacek

+0

你有json嗎? – zzlalani

+0

不,我有字符串,它類似於JSON,但它不是JSON! – Jacek

1

剛刪除引號""來自

data = "{isShowLoginPopup:true,newFavOfferId:1486882}"; 

DEMO

0

雖然表面上這看起來像JSON數據上,它是畸形的,因此它不直接JSON.parse()工作。這是因爲JSON對象需要按鍵被包裹在引號...

因此

"{isShowLoginPopup:true,newFavOfferId:1486882}" 

爲有效的JSON應該是:

"{\"isShowLoginPopup\":true,\"newFavOfferId\":1486882}" 

所以,你必須有,其實什麼是JavaScript對象,而不是JSON,但是您遇到的問題是這是一個JavaScript對象,它是一個字符串文字。如果這是硬編碼,那麼您只需從字符串的開頭和結尾刪除"

var data = {isShowLoginPopup:true,newFavOfferId:1486882}; 

如果該對象被序列化,並且需要從/向一個服務器等傳輸,則現實的是,它需要爲JSON格式的字符串,然後可以被去串行化回JavaScript對象被髮送。

var data = JSON.parse("{\"isShowLoginPopup\":true,\"newFavOfferId\":1486882}");