Phương thức JSON.parse() phân tích chuỗi JSON, xây dựng giá trị JavaScript hoặc đối tượng được mô tả bởi chuỗi. Một hàm reviver tùy chọn có thể được cung cấp để thực hiện chuyển đổi trên đối tượng kết quả trước khi nó được trả về.JSON.parse() method parses a JSON string, constructing the JavaScript value or object described by the string. An optional reviver function can be provided to perform a transformation on the resulting object before it is returned. JSON.parse(text)
JSON.parse(text, reviver)
text Chuỗi để phân tích thành json. Xem đối tượng JSON để biết mô tả về cú pháp JSON. Nếu một hàm, điều này quy định cách mỗi giá trị được tạo ra ban đầu bằng cách phân tích cú pháp được chuyển đổi trước khi được trả lại. Các giá trị không thể gọi được bị bỏ qua. Hàm được gọi với các đối số sau: Khóa liên quan đến giá trị. Giá trị được tạo ra bởi phân tích cú pháp. Giá trị JSON.parse("{}"); // {}
JSON.parse("true"); // true
JSON.parse('"foo"'); // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse("null"); // null
2, JSON.parse("{}"); // {}
JSON.parse("true"); // true
JSON.parse('"foo"'); // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse("null"); // null
3, chuỗi, số, boolean hoặc JSON.parse("{}"); // {}
JSON.parse("true"); // true
JSON.parse('"foo"'); // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse("null"); // null
4 tương ứng với JSON text đã cho. JSON.parse("{}"); // {}
JSON.parse("true"); // true
JSON.parse('"foo"'); // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse("null"); // null
6 Ném nếu chuỗi vào Parse không hợp lệ JSON. JSON.parse() phân tích chuỗi JSON theo ngữ pháp JSON, sau đó đánh giá chuỗi như thể đó là biểu thức JavaScript. Ví dụ duy nhất trong đó một đoạn văn bản JSON đại diện cho một giá trị khác với cùng một biểu thức JavaScript là khi xử lý khóa JSON.parse("{}"); // {}
JSON.parse("true"); // true
JSON.parse('"foo"'); // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse("null"); // null
8 - xem đối tượng cú pháp theo nghĩa đen so với JSON. Nếu một reviver được chỉ định, giá trị được tính toán bằng cách phân tích cú pháp được chuyển đổi trước khi được trả về. Cụ thể, giá trị được tính toán và tất cả các thuộc tính của nó (theo kiểu chiều sâu đầu tiên, bắt đầu với các thuộc tính được lồng nhất và tiến hành chính trị ban đầu) được chạy riêng lẻ qua reviver.Thử nó
Cú pháp
Thông số
Giá trị trả về
Ngoại lệ
Sự mô tả
Tham số reviver
reviver được gọi với đối tượng chứa thuộc tính được xử lý là JSON.parse( '{"p": 5}', (key, value) => typeof value === "number" ? value * 2 // return value * 2 for numbers : value, // return everything else unchanged ); // { p: 10 } JSON.parse('{"1": 1, "2": 2, "3": {"4": 4, "5": {"6": 6}}}', (key, value) => { console.log(key); return value; }); // 1 // 2 // 4 // 6 // 5 // 3 // "" 2 và hai đối số: ____10 và JSON.parse("{}"); // {} JSON.parse("true"); // true JSON.parse('"foo"'); // "foo" JSON.parse('[1, 5, "false"]'); // [1, 5, "false"] JSON.parse("null"); // null 1, đại diện cho tên thuộc tính dưới dạng chuỗi (ngay cả đối với mảng) và giá trị thuộc tính. Nếu hàm reviver trả về JSON.parse( '{"p": 5}', (key, value) => typeof value === "number" ? value * 2 // return value * 2 for numbers : value, // return everything else unchanged ); // { p: 10 } JSON.parse('{"1": 1, "2": 2, "3": {"4": 4, "5": {"6": 6}}}', (key, value) => { console.log(key); return value; }); // 1 // 2 // 4 // 6 // 5 // 3 // "" 6 (hoặc trả về không có giá trị - ví dụ: nếu thực thi rơi ra khỏi cuối hàm), thuộc tính sẽ bị xóa khỏi đối tượng. Mặt khác, thuộc tính được xác định lại là giá trị trả về. Nếu reviver chỉ biến đổi một số giá trị chứ không phải các giá trị khác, hãy chắc chắn trả về tất cả các giá trị không được cung cấp-nếu không, chúng sẽ bị xóa khỏi đối tượng kết quả.
Tương tự như tham số JSON.parse( '{"p": 5}', (key, value) => typeof value === "number" ? value * 2 // return value * 2 for numbers : value, // return everything else unchanged ); // { p: 10 } JSON.parse('{"1": 1, "2": 2, "3": {"4": 4, "5": {"6": 6}}}', (key, value) => { console.log(key); return value; }); // 1 // 2 // 4 // 6 // 5 // 3 // "" 8 của JSON.parse( '{"p": 5}', (key, value) => typeof value === "number" ? value * 2 // return value * 2 for numbers : value, // return everything else unchanged ); // { p: 10 } JSON.parse('{"1": 1, "2": 2, "3": {"4": 4, "5": {"6": 6}}}', (key, value) => { console.log(key); return value; }); // 1 // 2 // 4 // 6 // 5 // 3 // "" 9, reviver sẽ được gọi lần cuối trên đối tượng gốc với một chuỗi trống là JSON.parse("{}"); // {} JSON.parse("true"); // true JSON.parse('"foo"'); // "foo" JSON.parse('[1, 5, "false"]'); // [1, 5, "false"] JSON.parse("null"); // null 0 và đối tượng gốc là JSON.parse("{}"); // {} JSON.parse("true"); // true JSON.parse('"foo"'); // "foo" JSON.parse('[1, 5, "false"]'); // [1, 5, "false"] JSON.parse("null"); // null 1. Đối với phân tích văn bản JSON cho các giá trị nguyên thủy, reviver sẽ được gọi một lần.
Lưu ý rằng reviver được chạy sau khi giá trị được phân tích cú pháp. Vì vậy, ví dụ, các số trong văn bản JSON sẽ được chuyển đổi thành số JavaScript và có thể mất độ chính xác trong quá trình. Để chuyển số lượng lớn mà không mất độ chính xác, tuần tự hóa chúng thành chuỗi và hồi sinh chúng thành Bigint, hoặc các định dạng chính xác tùy ý thích hợp khác.
Ví dụ
Sử dụng json.parse ()
JSON.parse("{}"); // {} JSON.parse("true"); // true JSON.parse('"foo"'); // "foo" JSON.parse('[1, 5, "false"]'); // [1, 5, "false"] JSON.parse("null"); // null
Sử dụng tham số Reviver
JSON.parse( '{"p": 5}', (key, value) => typeof value === "number" ? value * 2 // return value * 2 for numbers : value, // return everything else unchanged ); // { p: 10 } JSON.parse('{"1": 1, "2": 2, "3": {"4": 4, "5": {"6": 6}}}', (key, value) => { console.log(key); return value; }); // 1 // 2 // 4 // 6 // 5 // 3 // ""
Sử dụng Reviver khi được ghép nối với người thay thế JSON.Stringify ()
Để một giá trị để chuyến đi khứ hồi đúng (nghĩa là nó bị phân rã thành cùng một đối tượng ban đầu), quá trình tuần tự hóa phải lưu giữ thông tin loại. Ví dụ: bạn có thể sử dụng tham số JSON.parse( '{"p": 5}', (key, value) => typeof value === "number" ? value * 2 // return value * 2 for numbers : value, // return everything else unchanged ); // { p: 10 } JSON.parse('{"1": 1, "2": 2, "3": {"4": 4, "5": {"6": 6}}}', (key, value) => { console.log(key); return value; }); // 1 // 2 // 4 // 6 // 5 // 3 // "" 8 của JSON.parse( '{"p": 5}', (key, value) => typeof value === "number" ? value * 2 // return value * 2 for numbers : value, // return everything else unchanged ); // { p: 10 } JSON.parse('{"1": 1, "2": 2, "3": {"4": 4, "5": {"6": 6}}}', (key, value) => { console.log(key); return value; }); // 1 // 2 // 4 // 6 // 5 // 3 // "" 9 cho mục đích này:
// Maps are normally serialized as objects with no properties. // We can use the replacer to specify the entries to be serialized. const map = new Map([ [1, "one"], [2, "two"], [3, "three"], ]); const jsonText = JSON.stringify( map, (key, value) => (value instanceof Map ? Array.from(value.entries()) : value), ); console.log(jsonText); // [[1,"one"],[2,"two"],[3,"three"]] const map2 = JSON.parse( jsonText, (key, value) => (key === "" ? new Map(value) : value), ); console.log(map2); // Map { 1 => "one", 2 => "two", 3 => "three" }
Bởi vì JSON không có không gian cú pháp để chú thích siêu dữ liệu loại, để hồi sinh các giá trị không phải là đối tượng đơn giản, bạn phải xem xét một trong những điều sau đây:
- Tuần tự hóa toàn bộ đối tượng thành một chuỗi và tiền tố nó bằng một thẻ loại.
- "Đoán" dựa trên cấu trúc của dữ liệu (ví dụ: một mảng gồm các mảng hai thành viên)
- Nếu hình dạng của tải trọng được cố định, dựa trên tên thuộc tính (ví dụ, tất cả các thuộc tính được gọi là // Maps are normally serialized as objects with no properties. // We can use the replacer to specify the entries to be serialized. const map = new Map([ [1, "one"], [2, "two"], [3, "three"], ]); const jsonText = JSON.stringify( map, (key, value) => (value instanceof Map ? Array.from(value.entries()) : value), ); console.log(jsonText); // [[1,"one"],[2,"two"],[3,"three"]] const map2 = JSON.parse( jsonText, (key, value) => (key === "" ? new Map(value) : value), ); console.log(map2); // Map { 1 => "one", 2 => "two", 3 => "three" } 7 giữ các đối tượng // Maps are normally serialized as objects with no properties. // We can use the replacer to specify the entries to be serialized. const map = new Map([ [1, "one"], [2, "two"], [3, "three"], ]); const jsonText = JSON.stringify( map, (key, value) => (value instanceof Map ? Array.from(value.entries()) : value), ); console.log(jsonText); // [[1,"one"],[2,"two"],[3,"three"]] const map2 = JSON.parse( jsonText, (key, value) => (key === "" ? new Map(value) : value), ); console.log(map2); // Map { 1 => "one", 2 => "two", 3 => "three" } 8).
Json.parse () không cho phép dấu phẩy kéo dài
// both will throw a SyntaxError JSON.parse("[1, 2, 3, 4, ]"); JSON.parse('{"foo" : 1, }');
Json.parse () không cho phép trích dẫn đơn lẻ
// will throw a SyntaxError JSON.parse("{'foo': 1}");
Thông số kỹ thuật
Đặc tả ngôn ngữ Ecmascript # Sec-Json.Parse # sec-json.parse |
Tính tương thích của trình duyệt web
Bảng BCD chỉ tải trong trình duyệt