2015-06-12 24 views
0

有人可以解釋爲什麼當我嘗試在運營商 「+」,使用JSON.parse()來 「 - 」, 「*」, 「/」 返回:JSON.parse()來專門經營

SyntaxError: Unexpected token + 
SyntaxError: Unexpected token - 
SyntaxError: Unexpected token * 
SyntaxError: Unexpected token/

我正在傳遞一個有效的字符串,但它不會像本身一樣返回運算符。文檔中沒有任何內容可以解釋爲什麼這是無效的:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse

任何幫助表示讚賞。謝謝。

編輯爲清楚起見*

在本文檔中,下面的情況下都是有效的。它們是傳遞給JSON.parse()的任意字符串。您可以在控制檯中驗證這些示例。我的問題是爲什麼以字符串形式傳遞運算符不會返回運算符。

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

JSON具有非常特定的語法,就像任何其他數據描述格式,例如XML。 '「+」'是無效的JSON。它也不是有效的XML。不確定你的期望?這裏是完整的語法:http://json.org/ –

+0

我不知道我理解。 'JSON.parse'用於解析[JSON](https://en.wikipedia.org/wiki/JSON),而不是任意的JavaScript。你能澄清你的問題嗎? – Matt

+0

你有沒有可以提供的JSON樣本? –

回答

0

JSON它是一個包含鍵值對的字符串。 JSON.parse()它是一個函數,它將返回具有以key命名的屬性的對象,這意味着您不能使用+, - ,/,*作爲對象屬性的名稱。這就是你收到這個錯誤的原因。

+0

*「JSON.parse()它是一個函數,它將返回具有用鍵名稱的屬性的對象」*否。它將返回對應的值傳入的JSON值。 –

+0

但是,如果我輸入有效的json:'JSON.parse('{「foo」:「bar」}')'我會收到:'Object {foo:「bar」}'。 ..我只是嘗試說+, - 等不好的對象屬性名稱... –

+0

是的,但如果你鍵入'JSON.parse('「foo」')'那麼你得到'「富」',而不是目的。 –

1

在JSON中,字符串需要用雙引號。所以如果你想要一個包含一個運算符的JSON字符串,它需要被引用。

var json = '"+"'; 
 
var result = JSON.parse(json); 
 
alert(result);

這將提醒+

單引號用於Javascript文字,雙引號是JSON語法的一部分。

+0

根據你的代碼'2 + result + 2'會返回字符串'「2 + 2」'。它不是運營商。它仍然是一個字符串,並沒有被解析。 –

+0

@GeraldAnekwe:當然。 JSON是**數據描述格式**。這不是一種編程語言。它沒有運營商。 –

+0

@GeraldAnekwe'JSON.parse'不用於解析Javascript表達式,它用於解析JSON數據。 – Barmar

0

運算符不是有效的json。 JSON.parse用於將json格式的字符串轉換爲corressponding javascript類型和對象。您正在尋找evaleval執行一個字符串,就好像它是javascript代碼一樣。

Information on eval

Information on valid json