2012-06-08 45 views
5

Tôi có nhầm lẫn về những gì chính xác người có nghĩa là bởi Literals Object, JSON, JavaScript Objects, với tôi họ có vẻ tương tự:Sự khác nhau giữa một đối tượng JS bằng chữ và một chuỗi JSON là gì?

{foo: 'bar', bar : 'baz'} 

AFAIK, ở trên là đối tượng theo nghĩa đen, json cũng như đối tượng javascript, phải không ?

Đối tượng theo nghĩa đen và chữ viết có nghĩa là giống nhau không?

Các bạn phân biệt đâu là gì?

+1

Câu hỏi này và câu trả lời của nó có thể hữu ích: [Sự khác biệt giữa JSON và Ký hiệu chữ của đối tượng là gì?] (http://stackoverflow.com/questions/2904131/what-is-the-difference-between-json-and-object-literal-notation) –

+2

Rất hiếm khi bạn sẽ tự tạo một chuỗi trong JavaScript để biểu diễn cấu trúc JSON. Thông thường nếu có bất kỳ dữ liệu JSON nào trong JavaScript của bạn, nó sẽ được tạo bằng cách sử dụng 'JSON.stringify()'. Hãy nghĩ về JSON là đánh dấu được phân tích cú pháp thành cấu trúc dữ liệu. Đánh dấu đó có thể được gửi đến một số môi trường không phải JavaScript và được phân tích thành bất kỳ cấu trúc dữ liệu nào có ý nghĩa đối với môi trường đó. –

+2

... nói cách khác, đó là định dạng văn bản được chuẩn hóa để truyền dữ liệu giữa các môi trường lập trình khác nhau. –

Trả lời

7

JSON chỉ là định dạng dữ liệu, như XML. Đúng JSON nên có các phím được bao quanh bởi dấu ngoặc kép, như vậy:

{"foo":"bar"} 

Javascript Objects là một phần của ngôn ngữ JavaScript, và có liên quan đến những thứ như một nguyên mẫu.

Ký hiệu đối tượng đang tạo đối tượng javascript đúng vị trí với ngoặc vuông thay vì sử dụng từ khóa new hoặc Object.create().

//object literal 
var foo = {}; 

//equivalent 
var foo = new Object(); 
+0

Tôi thích câu trả lời, ngoài câu đầu tiên. Chỉ với dòng mã này, nó không phải là JSON cũng như JavaScript hợp lệ (hoặc đối tượng theo nghĩa đen). Đối với JSON, nó bỏ qua các dấu ngoặc kép xung quanh các khóa và trong JavaScript, vì nó không nằm trong ngữ cảnh biểu thức, '{}' sẽ được hiểu là các dấu phân tách khối (và không phải là các chỉ số theo ngữ cảnh). Vì vậy, nó không phải là tất cả ba, nó không phải là. –

+1

Điểm tốt. câu đó là không cần thiết. đã xóa! –

2

Theo specification, trong JSON tất cả các chuỗi, cho dù chúng là giá trị hay từ khóa, sẽ được bao quanh bởi dấu ngoặc kép.

dụ của bạn sẽ là một chuỗi JSON hợp lệ nếu nó có chứa những điều sau đây:

{"foo": "bar", "bar": "baz"} 
+0

Từ cùng một liên kết, "Giá trị có thể là một chuỗi trong dấu ngoặc kép hoặc số, hoặc đúng hoặc sai hoặc null hoặc đối tượng hoặc mảng. lồng nhau " – Jashwant

+0

Nó sẽ là JSON hợp lệ nếu nó là' {"foo": "bar", "bar": "baz"} '... dấu ngoặc kép xung quanh không hợp lệ. –

+0

@FelixKling Tôi nghĩ bằng "chuỗi JSON hợp lệ", ý nghĩa của chúng là "một chuỗi chứa cú pháp JSON hợp lệ". Hoặc, để đặt nó theo một cách khác, một chuỗi có thể được phân tích cú pháp thành JSON để tạo một đối tượng. –

4

AFAIK, ở trên là đối tượng theo nghĩa đen, json cũng như đối tượng javascript, phải không?

Đây là một đối tượng theo nghĩa đen. Nó tạo ra một đối tượng.

Nó không phải là JSON, vì nó không phù hợp với cú pháp (là một tập hợp con của ký hiệu ngữ pháp đối tượng). Các khóa không được trích dẫn và loại dấu ngoặc kép sai (' thay vì ") được sử dụng xung quanh các giá trị.

Các bạn phân biệt đâu là gì?

Bối cảnh.

JSON thường không xuất hiện (được nhúng) ở giữa các chương trình JavaScript. Nó là một định dạng dữ liệu và thường xuất hiện dưới dạng toàn bộ tệp (hoặc phản hồi HTTP).

Khi có gì đó mong đợi một đối tượng, nó có thể lấy một đối tượng từ một đối tượng theo nghĩa đen hoặc từ một biến (hoặc giá trị trả về từ một cuộc gọi hàm, v.v.).

11

Biến jsonString chứa một chuỗi JSON:

var jsonString = '{"foo": "bar", "bar" : "baz"}' 

Biến javascriptObject chứa một đối tượng javascript, khởi tạo sử dụng một đối tượng theo nghĩa đen:

var javascriptObject = {foo: 'bar', bar : 'baz'} 

Bạn có thể chuyển đổi một chuỗi json đến một đối tượng javascript với JSON.parse và quay lại với JSON.stringify.

4

JSON bắt nguồn từ ký hiệu chữ của đối tượng của JavaScript và chính nó là một chuỗi. Điều đó giải thích sự giống nhau, khi chỉ nhìn vào nó. Ngày nay, JSON được sử dụng như một phương tiện chung để tuần tự hóa tất cả các loại dữ liệu, trước khi gửi nó qua một số mạng hoặc lưu trữ nó.

// this is a JSON variable 
var json = '{"foo": "bar", "bar" : "baz"}'; 

// obj is a JavaScript obj, defined by the object literal on the right hand side 
var obj = {foo: 'bar', bar : 'baz'}; 
  • JSON - đối tượng serialized; cú pháp tương tự như xác định một đối tượng trong JS
  • Object đen - cú pháp tốc ký để xác định một đối tượng trong JS
  • Object - kết quả của một định nghĩa bởi, ví dụ, một đối tượng đen

Trong JS, bạn có thể chuyển đổi chuỗi JSON thành đối tượng bằng cách sử dụng

var obj = JSON.parse(json); 

và nhận được biểu diễn JSON của đối tượng (không bao gồm chức năng đính kèm)

var json = JSON.stringify(obj); 
+3

Chuỗi json của bạn không hợp lệ ... – Eric

+0

@Eric Cảm ơn. Đã chỉnh sửa. – Sirko

+2

Chuỗi json của bạn là _still_ không hợp lệ. – Eric

0

Object Literal:

Tham khảo mozilla,

Một đối tượng theo nghĩa đen là một danh sách các số không hay nhiều cặp tên thuộc tính và các giá trị liên quan của một đối tượng, kèm theo trong xoăn niềng răng ({}).

Javascript Object:

Tham khảo mozilla,

Trong JavaScript, một đối tượng là một thực thể độc lập, với tài sản và loại

JSON:

Tham khảo mozillamozilla

JSON (JavaScript Object Notation) là một định dạng dữ liệu trao đổi. Nó gần giống với một tập con cú pháp JavaScript, mặc dù nó không phải là một tập hợp con nghiêm ngặt .JSON là một cú pháp để tuần tự hóa các đối tượng, mảng, số, chuỗi, booleans và null.Nó dựa trên cú pháp JavaScript nhưng khác biệt với cú pháp: một số JavaScript không phải là JSON và một số JSON là một JavaScript không phải là JavaScript.

Nói cách lỏng lẻo,

Một object là một biến javascript mà có thể có các thuộc tính và loại.

An object literal là cách để chỉ định thuộc tính và giá trị được liên kết cho object.

JSON là object literal được sử dụng rộng rãi hơn cho trao đổi dữ liệu được bao bọc dưới dạng chuỗi.

(Thông thường, tính nghiêm minh là có cho phép tất cả ngôn ngữ để sử dụng nó, chúng ta không thể sử dụng function như giá trị, key nên luôn luôn có trong dấu ngoặc kép (Trong đối tượng theo nghĩa đen của nó không bắt buộc))

Các vấn đề liên quan