Tôi kinh hoàng bởi sự hiện diện của thông tin sai lệch được phát hành cao về một câu hỏi được xem rất cao về một chủ đề cơ bản.
Chuỗi JSON không thể được trích dẫn với các trích dẫn đơn. Các phiên bản khác nhau của thông số kỹ thuật [bản gốc của Douglas Crockford, phiên bản ECMA và phiên bản IETF] tất cả các trạng thái mà các chuỗi phải được trích dẫn với trích dẫn kép. Đây không phải là một vấn đề lý thuyết, cũng không phải là vấn đề quan điểm như câu trả lời được chấp nhận hiện tại cho thấy; Bất kỳ trình phân tích cú pháp JSON nào trong thế giới thực sẽ lỗi nếu bạn cố gắng phân tích một chuỗi được trích xuất đơn.
Phiên bản của Crockford và Ecma thậm chí còn hiển thị định nghĩa của một chuỗi bằng cách sử dụng một bức tranh đẹp, điều này sẽ làm cho điểm rõ ràng rõ ràng:
Hình ảnh đẹp cũng liệt kê tất cả các chuỗi thoát hợp pháp trong chuỗi JSON:
\"
\\
\/
\b
\f
\n
\r
\t
0 sau đó là bốn chữ số{ "KEY\\\t\/\"": "VALUE\\\t\/\r\n\"", "0": "\u0000", "1": "\u0001", "31": "\u001f" }
Lưu ý rằng, trái với vô nghĩa trong một số câu trả lời khác ở đây,
{
"KEY\\\t\/\"": "VALUE\\\t\/\r\n\"",
"0": "\u0000",
"1": "\u0001",
"31": "\u001f"
}
1 không bao giờ là một chuỗi thoát hợp lệ trong chuỗi JSON. Nó không cần phải có, bởi vì các chuỗi JSON luôn được trích dẫn gấp đôi.Cuối cùng, bạn thường không nên nghĩ về việc tự thoát các nhân vật khi tạo JSON một cách lập trình [mặc dù tất nhiên bạn sẽ chỉnh sửa thủ công, giả sử, một tệp cấu hình dựa trên JSON]. Thay vào đó, hãy hình thành cấu trúc dữ liệu bạn muốn mã hóa bằng bất kỳ loại bản đồ, mảng, chuỗi, số, boolean và null gốc nào ngôn ngữ của bạn có, sau đó mã hóa nó thành JSON với chức năng mã hóa JSON. Một chức năng như vậy có lẽ được tích hợp vào bất kỳ ngôn ngữ nào bạn đang sử dụng, như JavaScript's
{
"KEY\\\t\/\"": "VALUE\\\t\/\r\n\"",
"0": "\u0000",
"1": "\u0001",
"31": "\u001f"
}
2, PHP's {
"KEY\\\t\/\"": "VALUE\\\t\/\r\n\"",
"0": "\u0000",
"1": "\u0001",
"31": "\u001f"
}
3 hoặc Python's {
"KEY\\\t\/\"": "VALUE\\\t\/\r\n\"",
"0": "\u0000",
"1": "\u0001",
"31": "\u001f"
}
4. Nếu bạn đang sử dụng một ngôn ngữ không có chức năng như vậy, bạn có thể tìm thấy thư viện phân tích cú pháp JSON và mã hóa để sử dụng. Nếu bạn chỉ cần sử dụng các chức năng ngôn ngữ hoặc thư viện để chuyển đổi mọi thứ sang và từ JSON, bạn thậm chí không bao giờ cần biết các quy tắc trốn thoát của JSON. Đây là những gì người hỏi câu hỏi sai lầm ở đây nên làm. Thoát khỏi hoặc giải quyết một chuỗi JSON xóa dấu vết của các ký tự vi phạm có thể ngăn chặn phân tích cú pháp.
Các ký tự sau được bảo lưu trong JSON và phải được thoát ra đúng cách để được sử dụng trong các chuỗi:
- Backspace được thay thế bằng \ b is replaced with \b
- Nguồn cấp dữ liệu biểu mẫu được thay thế bằng \ f is replaced with \f
- Dòng mới được thay thế bằng \ n is replaced with \n
- Quay trở lại vận chuyển được thay thế bằng \ r is replaced with \r
- Tab được thay thế bằng \ t is replaced with \t
- Báo giá kép được thay thế bằng \ " is replaced with \"
- Backslash được thay thế bằng \\ is replaced with \\
- JSON Beautifier
- JSON Phân tích cú pháp
- XML định dạng
- JSbeautifier
- Tiết kiệm
- Liên kết gần đây
- Đăng nhập
Sao chép vào clipboard
Thoát khỏi hoặc giải quyết một chuỗi JSON xóa dấu vết của các ký tự vi phạm có thể ngăn chặn phân tích cú pháp.
Backspace được thay thế bằng \ b, nguồn cấp dữ liệu biểu mẫu được thay thế bằng \ f, dòng mới được thay thế bằng \ n, return vận chuyển được thay thế bằng \ r, tab được thay thế bằng \ t, báo giá kép được thay thế bằng \ ", dấu gạch chéo ngược được thay thế bằng \ \.
Text.JSON.Escape
Tóm tắt
- Lớp học Escape t ở đâu Escape t where
- Escape :: t -> t
- ESC :: Char -> Chuỗi
Tài liệu
Lớp học thoát t wheresource Escape t whereSource
Lớp JSON ESCAPABLE TEXT. Solidus [
{
"KEY\\\t\/\"": "VALUE\\\t\/\r\n\"",
"0": "\u0000",
"1": "\u0001",
"31": "\u001f"
}
5] luôn được thoát ra, cũng như tất cả các ký tự điều khiển ASCII. Các ký tự điều khiển không phải ASCII và các ký tự in unicode ở trên ASCII bị bỏ lại như vậy. Bỏ qua nội dung chính
Trình duyệt này không còn được hỗ trợ.
Nâng cấp lên Microsoft Edge để tận dụng các tính năng mới nhất, cập nhật bảo mật và hỗ trợ kỹ thuật.
Làm thế nào cho JSON thoát khỏi các ký tự đặc biệt và ký tự điều khiển [SQL Server]
- Bài báo
- 04/21/2022
- 2 phút để đọc
Trong bài viết này
Áp dụng cho: SQL Server 2016 [13.x] và sau đó SQL Server 2016 [13.x] and later
Chủ đề này mô tả cách mà mệnh đề JSON của câu lệnh SQL Server Chọn thoát khỏi các ký tự đặc biệt và đại diện cho các ký tự điều khiển trong đầu ra JSON.FOR JSON clause of a SQL Server SELECT statement escapes special characters and represents control characters in the JSON output.
Quan trọng
Trang này mô tả hỗ trợ tích hợp cho JSON trong Microsoft SQL Server. Để biết thông tin chung về việc thoát và mã hóa trong JSON, xem Phần 2.5 của JSON RFC - //www.ietf.org/rfc/rfc4627.txt.
Thoát khỏi các nhân vật đặc biệt
Nếu dữ liệu nguồn chứa các ký tự đặc biệt, mệnh đề JSON sẽ thoát chúng trong đầu ra JSON với
{
"KEY\\\t\/\"": "VALUE\\\t\/\r\n\"",
"0": "\u0000",
"1": "\u0001",
"31": "\u001f"
}
6, như được hiển thị trong bảng sau. Điều này thoát ra xảy ra cả trong tên của các thuộc tính và trong các giá trị của chúng.FOR JSON clause escapes them in the JSON output with {
"KEY\\\t\/\"": "VALUE\\\t\/\r\n\"",
"0": "\u0000",
"1": "\u0001",
"31": "\u001f"
}
6, as shown in the following table. This escaping occurs both in the names of properties and in their values.
Dấu ngoặc kép ["] | \ " |
Backslash [\] | \\ |
Gạch chéo [/] | \/ |
Backspace | \ b |
Thức ăn dạng | \ f |
Dòng mới | \N |
Vận chuyển trở lại | \ r |
Tab ngang | \ t |
Ký tự điều khiển
Nếu dữ liệu nguồn chứa các ký tự điều khiển, mệnh đề JSON sẽ mã hóa chúng ở đầu ra JSON ở định dạng
{
"KEY\\\t\/\"": "VALUE\\\t\/\r\n\"",
"0": "\u0000",
"1": "\u0001",
"31": "\u001f"
}
7, như được hiển thị trong bảng sau.FOR JSON clause encodes them in the JSON output in {
"KEY\\\t\/\"": "VALUE\\\t\/\r\n\"",
"0": "\u0000",
"1": "\u0001",
"31": "\u001f"
}
7 format, as shown in the following table.
Char [0] | \ U0000 |
Char [1] | \ u0001 |
... | ... |
Char [31] | \ u001f |
Thí dụ
Dưới đây là một ví dụ về đầu ra JSON cho dữ liệu nguồn bao gồm cả ký tự đặc biệt và ký tự điều khiển.FOR JSON output for source data that includes both special characters and control characters.
Query:
SELECT
'VALUE\ /
"' as [KEY\/"],
CHAR[0] as '0',
CHAR[1] as '1',
CHAR[31] as '31'
FOR JSON PATH
Result:
{
"KEY\\\t\/\"": "VALUE\\\t\/\r\n\"",
"0": "\u0000",
"1": "\u0001",
"31": "\u001f"
}
Tìm hiểu thêm về JSON trong SQL Server và Azure SQL cơ sở dữ liệu
Video Microsoft
Để giới thiệu trực quan về hỗ trợ JSON tích hợp trong cơ sở dữ liệu SQL Server và Azure SQL, hãy xem các video sau:
- JSON như một cầu nối giữa Noql và thế giới quan hệ
Xem thêm
Định dạng truy vấn kết quả là JSON với JSON [SQL Server] cho mệnh đề
FOR Clause
Nhận xét
Gửi và xem phản hồi cho