2013-09-05 44 views
9

我想學習JSON,我知道任何帶有雙引號中的鍵的JavaScript對象都被視爲JSON對象。有或沒​​有引號的JSON對象

而且我寫這個對象

var jstr1 = {"mykey": "my value"}; 

但是當我嘗試使用JSON.parse(jstr1)來分析,我得到了下面的錯誤。看截圖。

enter image description here

但是當我嘗試解析這個

var jstr = '{"mykey": "my value"}';, 

我得到了成功,見截圖。我對此感到困惑。請解釋爲什麼會發生這種情況。這兩種形式有什麼區別。

當我得到JSON從任何服務,它會是什麼樣子,是否會在jstrjstr1

感謝的形式提前爲任何幫助的迴應。

+0

作爲@ComFreek sais,如果您已經擁有'Hash',您希望從解析中獲得什麼? – fguillen

+1

第一個是一個對象。其次是一個字符串,一個精確的JSON。 JSON.parse適用於字符串,而不是對象。 – user568109

回答

19

您正在創建一個Javascript Object。如果你想要一個JSON字符串,使用JSON.stringify

所以

var myObj = {mykey: "my value"} 
    ,myObjJSON = JSON.stringify(myObj); 

基於評論: 有沒有這樣的事,作爲一個JSON 對象。有JSON字符串,對於Javascript對象可以是parsed。 JavaScript對象可以是stringified以JSON字符串。在JSON字符串內鍵和值被引用。所以上面的結果是字符串包含'{"mykey":"my value"}'

嘗試在您的瀏覽器控制檯中解析myObjJSON(使用:JSON.parse(myObjJSON)),您將獲得:Object {mykey: "my value"}

+0

@Kooilnc在你的答案中,儘管mykey不是按JSON標準指定的雙引號,但它被轉換爲JSON字符串。「var myObj = {mykey:」my value「}」。當我使用帶或不帶引號的mykey對對象進行字符串處理時,我得到了相同的結果。 –

+0

@MohamedHussain密鑰不必在* JavaScript *中用雙引號括起來。 – ComFreek

+0

@ComFreek你是對的。鍵不需要引號,但對於JSON,他們的關鍵需要用雙引號,我從http://stackoverflow.com/questions/2904131/what-is-the-difference-between-json-and -object-literal-notation?lq = 1 –

6

此代碼

var jstr1 = {"mykey": "my value"}; 

創建使用對象文本符號 JavaScript對象。
對於對象文字記譜法JSON之間的差值(JON是短於JavaScript對象符號),在這裏看到:What is the difference between JSON and Object Literal Notation?

它使邏輯上沒有意義的這個數據傳遞到JSON.parse()

與第一個變體(var jstr = '{"mykey": "my value"}';)的區別在於它創建了一個「原始」字符串。除了原始字符序列之外,您不能訪問該字符串上的任何內容。使用JSON.parse()爲我們提供了一個從字符串創建的可用表單(對象)。

SyntaxError: Unexpected token o

這來源於jstr1自動串轉換:

jstr1.toString(); 
// gives us [object Object] 
// ----------↑ 
3

你有一些missunnderstanting爲JSON.parse

JSON.parse takes string and parse it to JAVASCRIPT object 
JSON.stringify takes an object and parse it to a string 

這就是爲什麼當你運行下面的

JSON.parse('{"a":"b"}') 

它的工作,因爲它需要一個JSON字符串

但是當你跑

JSON.parse({"a":"b"}) 

它沒有因爲對象物coverted到串這是

"[object Object]" 

,這裏是其中「[對象的對象]」不是在信o

2

JSON.parse(有效的語法錯誤)接受一個字符串並轉換爲JSON對象,它不會將JavaScript對象作爲參數。請參閱JSON.parse()它可以給你的結果如下

JSON.parse('{}'); // {} 
JSON.parse('true'); // true 
JSON.parse('"foo"'); // "foo" 
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"] 
JSON.parse('null'); // null 

和知道,如果解析字符串不是有效的JSON,一個引發SyntaxError異常。所以這是你上jstr1語法錯誤(這不是一個JSON字符串)

-3

如何:

MarahJSONObject gtp = new MarahJSONObject() 
    gtp.put("ecomm_prodid", "123") 
    gtp.put("ecomm_pagetype", "cart") 
    gtp.put("ecomm_totalvalue", "19.99") 

String r = gtp.toString() 
    gtp.keySet().each { 
     r = r.replace(/"${it}"/, it) 
    } 
    println r 

那麼你將得到: {的ecomm_pagetype: 「購物車」,加入ecomm_prodid」 123「,ecomm_totalvalue:」19.99「}

+1

它不是一個有效的coment,請... –

+0

甚至是什麼?我不明白這是如何解決手頭的問題的 – Frogboxe