JSON là một loại định dạng để mô tả các đối tượng, tương thích với các ngôn ngữ mã hóa khác nhau. Sự khác biệt đáng chú ý nhất giữa biểu diễn JSON và đối tượng JavaScript là việc sử dụng dấu ngoặc kép
Đối tượng
{
"browsers": {
"firefox": {
"name": "Firefox",
"pref_url": "about:config",
"releases": {
"1": {
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}
}
}
}
}
3 chứa các phương thức phân tích cú pháp Ký hiệu đối tượng JavaScript [JSON] và chuyển đổi giá trị thành JSON. Nó không thể được gọi hoặc xây dựngSự miêu tả
Không giống như hầu hết các đối tượng toàn cầu,
{
"browsers": {
"firefox": {
"name": "Firefox",
"pref_url": "about:config",
"releases": {
"1": {
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}
}
}
}
}
3 không phải là hàm tạo. Bạn không thể sử dụng nó với toán tử {
"browsers": {
"firefox": {
"name": "Firefox",
"pref_url": "about:config",
"releases": {
"1": {
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}
}
}
}
}
5 hoặc gọi đối tượng {
"browsers": {
"firefox": {
"name": "Firefox",
"pref_url": "about:config",
"releases": {
"1": {
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}
}
}
}
}
3 như một hàm. Tất cả các thuộc tính và phương thức của {
"browsers": {
"firefox": {
"name": "Firefox",
"pref_url": "about:config",
"releases": {
"1": {
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}
}
}
}
}
3 là tĩnh [giống như đối tượng {
"browsers": {
"firefox": {
"name": "Firefox",
"pref_url": "about:config",
"releases": {
"1": {
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}
}
}
}
}
8]Sự khác biệt về JavaScript và JSON
JSON là một cú pháp để tuần tự hóa các đối tượng, mảng, số, chuỗi, booleans và
{
"browsers": {
"firefox": {
"name": "Firefox",
"pref_url": "about:config",
"releases": {
"1": {
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}
}
}
}
}
9. Nó dựa trên cú pháp JavaScript, nhưng khác với JavaScript. hầu hết JavaScript không phải là JSON. Ví dụTên thuộc tính phải là chuỗi trích dẫn kép;
SốSố 0 đứng đầu bị cấm. Một dấu thập phân phải được theo sau bởi ít nhất một chữ số.
{
"browsers": {
"firefox": {
"name": "Firefox",
"pref_url": "about:config",
"releases": {
"1": {
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}
}
}
}
}
0 và {
"browsers": {
"firefox": {
"name": "Firefox",
"pref_url": "about:config",
"releases": {
"1": {
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}
}
}
}
}
1 không được hỗ trợBất kỳ văn bản JSON nào cũng là một biểu thức JavaScript hợp lệ, nhưng chỉ sau khi sửa đổi bộ siêu dữ liệu JSON. Trước khi sửa đổi, U+2028 LINE SEPARATOR và U+2029 PARAGRAPH SEPARATOR được cho phép ở dạng chuỗi ký tự và khóa thuộc tính trong JSON;
Những khác biệt khác bao gồm chỉ cho phép chuỗi trích dẫn kép và không hỗ trợ cho
{
"browsers": {
"firefox": {
"name": "Firefox",
"pref_url": "about:config",
"releases": {
"1": {
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}
}
}
}
}
3 hoặc nhận xét. Đối với những người muốn sử dụng định dạng cấu hình thân thiện với con người hơn dựa trên JSON, có JSON5, được sử dụng bởi trình biên dịch Babel và YAML được sử dụng phổ biến hơnCùng một văn bản có thể đại diện cho các giá trị khác nhau theo nghĩa đen của đối tượng JavaScript so với. JSON cũng vậy. Để biết thêm thông tin, hãy xem Cú pháp chữ đối tượng so với. JSON
Ngữ pháp JSON đầy đủ
Cú pháp JSON hợp lệ được xác định chính thức theo ngữ pháp sau, được biểu thị bằng ABNF và được sao chép từ tiêu chuẩn JSON của IETF [RFC]
JSON-text = object / array begin-array = ws %x5B ws ; [ left square bracket begin-object = ws %x7B ws ; { left curly bracket end-array = ws %x5D ws ; ] right square bracket end-object = ws %x7D ws ; } right curly bracket name-separator = ws %x3A ws ; : colon value-separator = ws %x2C ws ; , comma ws = *[ %x20 / ; Space %x09 / ; Horizontal tab %x0A / ; Line feed or New line %x0D ; Carriage return ] value = false / null / true / object / array / number / string false = %x66.61.6c.73.65 ; false null = %x6e.75.6c.6c ; null true = %x74.72.75.65 ; true object = begin-object [ member *[ value-separator member ] ] end-object member = string name-separator value array = begin-array [ value *[ value-separator value ] ] end-array number = [ minus ] int [ frac ] [ exp ] decimal-point = %x2E ; . digit1-9 = %x31-39 ; 1-9 e = %x65 / %x45 ; e E exp = e [ minus / plus ] 1*DIGIT frac = decimal-point 1*DIGIT int = zero / [ digit1-9 *DIGIT ] minus = %x2D ; - plus = %x2B ; + zero = %x30 ; 0 string = quotation-mark *char quotation-mark char = unescaped / escape [ %x22 / ; " quotation mark U+0022 %x5C / ; \ reverse solidus U+005C %x2F / ; / solidus U+002F %x62 / ; b backspace U+0008 %x66 / ; f form feed U+000C %x6E / ; n line feed U+000A %x72 / ; r carriage return U+000D %x74 / ; t tab U+0009 %x75 4HEXDIG ] ; uXXXX U+XXXX escape = %x5C ; \ quotation-mark = %x22 ; " unescaped = %x20-21 / %x23-5B / %x5D-10FFFF HEXDIG = DIGIT / %x41-46 / %x61-66 ; 0-9, A-F, or a-f ; HEXDIG equivalent to HEXDIG rule in [RFC5234] DIGIT = %x30-39 ; 0-9 ; DIGIT equivalent to DIGIT rule in [RFC5234]
Khoảng trắng không đáng kể có thể xuất hiện ở bất kỳ đâu ngoại trừ bên trong
{
"browsers": {
"firefox": {
"name": "Firefox",
"pref_url": "about:config",
"releases": {
"1": {
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}
}
}
}
}
4 [các số không được chứa khoảng trắng] hoặc {
"browsers": {
"firefox": {
"name": "Firefox",
"pref_url": "about:config",
"releases": {
"1": {
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}
}
}
}
}
5 [nơi nó được hiểu là ký tự tương ứng trong chuỗi hoặc sẽ gây ra lỗi]. Ký tự tab [U+0009], ký tự xuống dòng [U+000D], ký tự xuống dòng [U+000A] và ký tự khoảng trắng [U+0020] là các ký tự khoảng trắng hợp lệ duy nhấtthuộc tính tĩnh
{
"browsers": {
"firefox": {
"name": "Firefox",
"pref_url": "about:config",
"releases": {
"1": {
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}
}
}
}
}
6Giá trị ban đầu của thuộc tính
{
"browsers": {
"firefox": {
"name": "Firefox",
"pref_url": "about:config",
"releases": {
"1": {
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}
}
}
}
}
7 là chuỗi {
"browsers": {
"firefox": {
"name": "Firefox",
"pref_url": "about:config",
"releases": {
"1": {
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}
}
}
}
}
8. Tài sản này được sử dụng trong {
"browsers": {
"firefox": {
"name": "Firefox",
"pref_url": "about:config",
"releases": {
"1": {
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}
}
}
}
}
9phương pháp tĩnh
{
"browsers": {
"firefox": {
"name": "Firefox",
"pref_url": "about:config",
"releases": {
"1": {
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}
}
}
}
}
10Phân tích cú pháp một đoạn văn bản chuỗi dưới dạng JSON, tùy ý chuyển đổi giá trị được tạo và các thuộc tính của nó, đồng thời trả về giá trị
{
"browsers": {
"firefox": {
"name": "Firefox",
"pref_url": "about:config",
"releases": {
"1": {
"release_date": "2004-11-09",
"status": "retired",
"engine": "Gecko",
"engine_version": "1.7"
}
}
}
}
}
11Trả về một chuỗi JSON tương ứng với giá trị đã chỉ định, tùy chọn chỉ bao gồm một số thuộc tính nhất định hoặc thay thế các giá trị thuộc tính theo cách do người dùng xác định