2012-01-17 83 views
0

我想直接將JavaScript對象轉換爲字符串。我使用下面的代碼。將JavaScript對象轉換爲JSON字符串

var foo = {}; 
foo.test1 = test1; 
foo.test2 = test2; 
foo.test3 = test3; 

var jsonObj = JSON.stringify(foo); 

它工作正常,但它使用json2 JavaScript庫。不過,我需要在不使用任何庫的情況下以純JavaScript方式執行此操作。我知道使用傳遞的參數創建json feed會像這樣工作。

var jsonObj = "{\"test1\":\"" + test1+ "\",\"test2\":\"" + test2+ "\",\"test3\":\"" + test3+ "\"}"; 

但是,如果傳遞的參數(TEST1,TEST2和TEST3)包含雙引號時就會產生問題。

實現此目標的最佳方法是什麼?

謝謝

+1

爲什麼你不能使用庫?尤其像json2.js這樣的小而特殊的目的。 – Quentin 2012-01-17 09:31:41

+1

的確,您甚至可以將json2.js的縮小版與您的其他代碼一起粘貼,您不必將其保存在單獨的文件中。 – 2012-01-17 09:37:46

+0

如果您不打算支持非常舊的瀏覽器(或者像2001年那樣構建的瀏覽器),則不需要包含json2.js。 – techfoobar 2012-01-17 09:52:53

回答

2

你應該通過對每個鍵和部件String.replace(/"/g, "\\\"")逃脫雙引號。然而,爲了這個工作,你需要保證你的JS對象只有簡單的字符串/數字。請注意,json2庫僅在JSON的本機實現不存在時纔會使用;請注意,只有當JSON的本機實現不存在時纔會使用json2庫。 all modern browsers有內置的JSON支持(IE < 8是明顯的例外)。

+1

如果字符串包含一個新行,將會失敗 – Quentin 2012-01-17 09:34:35

+2

爲什麼要在正則表達式中轉義雙引號?它們在那裏沒有任何特殊的含義,只是增加了線路噪聲。 – Quentin 2012-01-17 09:35:59

+1

@Quentin:因爲它是一個字符串,我忘了刪除它時,我把它改爲一個正則表達式;) – Matt 2012-01-17 09:37:32

1

我認爲你完全誤解了JSON是什麼。 JSON代表Javascript對象表示法。

你還沒有意識到的是foo已經是一個對象,並且你進一步考慮了你將要編碼的內容以訪問jsonObj

這裏的提示jsonObj.test1:看起來很熟悉不是嗎?

你可能試圖做的是創建一個看起來像JSON內容但實際上不是對象的字符串。但這是一個不同的問題。

希望這會有所幫助。

+0

是的我試圖創建一個像json – Dilshan 2012-01-17 10:03:56

+1

這樣的字符串,所以我可以假設你不會像對象一樣使用'jsonObj'嗎?你會只是將它打印到屏幕或其他東西? – T9b 2012-01-17 11:30:29

+0

我需要閱讀屬性 – Dilshan 2012-01-17 11:33:42

相關問題