我是 JSON 和 JavaScript 对象的新手。
JSON 是对象的字符串表示形式。它是一种可互操作的序列化格式。它不仅仅与 javascript 绑定。例如,有一些 JSON 序列化器用于。NET 允许序列化/反序列化。NET 对象。
所以它只是一种格式,允许你将对象转换成字符串,如果你想通过网络传输的话,这很方便。
它非常接近 javascript 对象表示,如果您只是 eval()一个 JSON 字符串,您将得到相应的对象。
eval()
首先,您应该知道 JSON 是什么:
JSON 的语法受到 JavaScript 对象文字符号的启发,但它们之间存在差异。
例如,在 JSON 中必须引用所有的 keys,而在对象文字中则不必如此:
// JSON: { "foo": "bar" } // Object literal: var o = { foo: "bar" };
在 JSON 中引号是强制性的,因为在 JavaScript 中(更确切地说是在 ECMAScript 3 rd 中)。版) ,不允许使用 保留意见作为属性名,例如:
var o = { if: "foo" }; // SyntaxError in ES3
While, using a string literal as a property name (quoting the property name) gives no problems:
var o = { "if": "foo" };
因此,对于 “兼容性”(也许是简单的评估?) ,引号是强制性的。
The data types in JSON are also restricted to the following values:
string
number
object
array
true
false
null
Strings的语法发生了变化。它们 必须的由 双引号分隔,而在 JavaScript 中,可以互换地使用单引号或双引号。
Strings
// Invalid JSON: { "foo": 'bar' }
Numbers接受的 JSON 语法也发生了变化,在 JavaScript 中你可以使用十六进制文字,例如 0xFF,或者(臭名昭著的)八进制文字,例如 010。在 JSON 中,您只能使用 Decimal Literals。
Numbers
0xFF
010
// Invalid JSON: { "foo": 0xFF }
有一些错误的实现(Firefox 3.5 + ,IE8 + ,json2.js)错误地允许使用八进制文字,例如 JSON.parse('01')应该生成 SyntaxError。
JSON.parse('01')
SyntaxError
JSON 是一种数据交换格式,它看起来恰好像是 YAML 或 JavaScript 代码的子集,您可以执行并返回一个对象。JavaScript 对象只是 JavaScript 中的一个对象。
使用 JSON 作为数据交换格式,您可以用它交换文本形式的结构化数据。到目前为止,它已经与 JavaScript 完全解耦了。JavaScript 对象允许您在 JavaScript 程序执行期间创建和处理结构化数据。