我是JSON和JavaScript對象的新手。JSON和JavaScript對象之間有什麼區別?
- 有人能解釋一下JSON和JavaScript對象之間的區別嗎?
- 它們的用途是什麼?
- 一個比另一個更好嗎?還是取決於情況?
- 何時使用哪一個,在什麼情況下?
- 爲什麼JSON首先創建?它的主要目的是什麼?
- 有人可以舉例說明何時應該使用JSON而不是JavaScript對象,反之亦然?
我是JSON和JavaScript對象的新手。JSON和JavaScript對象之間有什麼區別?
首先,你應該知道JSON是什麼:
JSON的語法靈感來自JavaScript Object Literal符號,但它們之間存在差異。
例如,在JSON所有鍵必須被引用,而對象文本,這是沒有必要的:
// JSON:
{ "foo": "bar" }
// Object literal:
var o = { foo: "bar" };
的引號是強制的JSON,因爲在JavaScript(ECMAScript中第三個更準確地版。 ),的保留字作爲屬性名稱的使用不被允許,例如:
var o = { if: "foo" }; // SyntaxError in ES3
雖然,使用一個字符串文字作爲屬性名稱(引用的親perty名)沒有給出問題:
var o = { "if": "foo" };
所以對於「兼容性」(易eval'ing可能)的報價是強制性的?
在JSON的數據類型也被限制爲以下值:
string
number
object
array
true
false
null
的Strings
變化的語法。他們必須由雙引號分隔,而在JavaScript中,您可以交替使用單引號或雙引號。
// Invalid JSON:
{ "foo": 'bar' }
的Numbers
接受的JSON語法也改變,在JavaScript中可以使用十六進制字面值,例如0xFF
,或(臭名昭著)八路字面例如010
。在JSON中,只能使用十進制文字。
// Invalid JSON:
{ "foo": 0xFF }
有一些手推車實施方案(火狐3.5+ IE8 +,json2.js),其中八進制文字被錯誤地允許的,例如JSON.parse('01')
應產生一個SyntaxError
。
+1好的答案,但可以強調子集:可以使用任何有效的JSON聲明也是有效的JavaScript聲明,但並非所有有效的JavaScript聲明都是JSON聲明。 – 2010-10-20 08:26:00
對於展示我們在Javascript文件中看到JSON的唯一方式也是有幫助的;即在一個字符串內。 – 2011-12-09 18:12:49
@CMS在上面完全描述了它,但我會說你可以通過JSON實際上代表什麼來區別它們......這就是JavaScript Oject「Notation」! – Alex 2010-10-20 08:20:09
JSON是一個對象的字符串表示形式。它是一種可互操作的序列化格式。它不僅僅綁定到JavaScript。例如,有用於.NET的JSON序列化程序,允許您序列化/反序列化.NET對象。
所以它只是一種格式,允許您從對象轉換爲字符串,並返回這是方便的,如果你想通過電線傳輸它們。
它非常接近javascript對象表示,如果你只是一個JSON字符串,你會得到相應的對象。
不要讓Crockford聽到你說... – nickf 2010-10-20 08:34:48
@nickf,Crockford的json2.js庫只是做了一些「正則表達式驗證」後的'eval',它沒有做任何*解析*:P。事實上,即使他自己的圖書館*也有[他自己的RFC](http://www.ietf.org/rfc/rfc4627.txt?number=4627)的一些偏差!例如,json2.js可能錯誤地「解析「八進制文字,例如:'JSON.parse(」01「)'...我覺得很有趣:P – CMS 2010-10-20 08:46:35
@CMS好吧,我想道格會反對」簡單地''eval()'「這個短語。 (無正則表達式驗證等) – nickf 2010-10-20 10:52:14
JSON是一種數據交換格式,它恰好看起來像是您可以執行並返回對象的YAML或JavaScript代碼的子集。 JavaScript對象只是JavaScript中的一個對象。
使用JSON作爲數據交換格式,您可以用文本形式交換結構化數據。到目前爲止,它與JavaScript非常不兼容。 JavaScript對象允許您在執行JavaScript程序期間創建和使用結構化數據。
請一次提出一個問題。 – 2011-12-09 18:11:49
[JSON和Object Literal Notation之間的區別是什麼?](http://stackoverflow.com/questions/2904131/what-is-the-difference-between-json-and-object-literal-notation) – Teepeemm 2015-06-12 15:09:30