Trong SQLite, json_quote()
hàm chuyển đổi một số hoặc chuỗi thành biểu diễn JSON tương ứng của nó.
Chúng tôi cung cấp số hoặc chuỗi làm đối số khi chúng tôi gọi hàm và hàm trả về biểu diễn JSON của giá trị đó.
Cú pháp
Cú pháp như sau:
json_quote(X)
Ở đâu X
là một số hoặc chuỗi.
Ví dụ
Đây là những gì sẽ xảy ra khi chúng tôi truyền một chuỗi vào hàm:
SELECT json_quote('Super');
Kết quả:
"Super"
Và đây là một số:
SELECT json_quote(10.45);
Kết quả:
10.45
Đây là một chuỗi trông giống như một mảng:
SELECT json_quote('[10.45]');
Kết quả:
"[10.45]"
Đây là một chuỗi trông giống như một đối tượng:
SELECT json_quote('{ "score" : 10.45 }');
Kết quả:
"{ \"score\" : 10.45 }"
Nhưng nếu chúng ta truyền đối số trong json()
, chúng tôi nhận được cái này:
SELECT json_quote(json('{ "score" : 10.45 }'));
Kết quả:
{"score":10.45}
Giá trị rỗng
Chuyển null
trả về null
:
SELECT json_quote( null );
Kết quả:
null
Đây thực sự là giá trị văn bản SQL null
. Chúng tôi có thể xác minh điều này bằng cách chuyển nó đến json_type()
chức năng:
SELECT json_type(json_quote( null ));
Kết quả:
null
json_type()
hàm trả về kiểu giá trị văn bản SQL của đối số của nó. Trong trường hợp này, nó trả về null
, chỉ ra rằng json_quote()
hàm trả về null
khi chúng tôi vượt qua null
với nó.
Trong trường hợp chúng tôi nghi ngờ rằng SQLite CLI của chúng tôi đang trả về null
do giá trị null thực tế được trả về, chúng tôi có thể làm như sau để loại trừ:
.nullvalue N/A
Điều đó yêu cầu giao diện dòng lệnh của chúng tôi trả về N/A
bất cứ khi nào giá trị null được trả về.
Sau khi chạy lệnh trên, hãy chạy lại các câu lệnh trước đó, cũng như một thao tác thực sự dẫn đến giá trị null:
SELECT
json_quote( null ) AS json_quote,
json_type(json_quote( null )) AS json_type,
1 / 0 AS actual_null;
Kết quả:
+------------+-----------+-------------+ | json_quote | json_type | actual_null | +------------+-----------+-------------+ | null | null | N/A | +------------+-----------+-------------+
Trong SQLite, chia một số cho 0 dẫn đến giá trị rỗng (nhiều DBMS khác gặp lỗi trong những trường hợp như vậy). Trong ví dụ này, tôi đã đặt giá trị null để trả về N/A
và vì vậy chúng ta có thể thấy rằng có sự khác biệt giữa kết quả đầu ra của hai hàm và giá trị null thực tế. Nghĩa là, giá trị null duy nhất trong đầu ra ở trên nằm ở cột cuối cùng.
Đã nói tất cả những điều đó, giá trị null vẫn có thể dẫn đến giá trị văn bản SQL null
được trả về khi gọi json_quote()
. Có lẽ một ví dụ minh họa điều này tốt hơn tôi có thể giải thích:
SELECT
json_quote( 1 / 0 ),
json_type(json_quote( 1 / 0 )),
json_type( 1 / 0 ),
1 / 0;
Kết quả:
+---------------------+--------------------------------+--------------------+-------+ | json_quote( 1 / 0 ) | json_type(json_quote( 1 / 0 )) | json_type( 1 / 0 ) | 1 / 0 | +---------------------+--------------------------------+--------------------+-------+ | null | null | N/A | N/A | +---------------------+--------------------------------+--------------------+-------+
Chúng ta có thể thấy rằng hai cột đầu tiên trả về null
Giá trị văn bản SQL và hai cột khác trả về giá trị rỗng thực tế.
Truyền Booleans
Dưới đây là một ví dụ về việc chuyển các boolean như true
và false
:
SELECT
json_quote( true ) AS true,
json_quote( false ) AS false;
Kết quả:
+------+-------+ | true | false | +------+-------+ | 1 | 0 | +------+-------+
Số lượng đối số không hợp lệ
Việc gọi hàm mà không chuyển đối số dẫn đến lỗi:
SELECT json_quote();
Kết quả:
Parse error: wrong number of arguments to function json_quote() SELECT json_quote(); ^--- error here
Và việc chuyển quá nhiều đối số cũng dẫn đến lỗi:
SELECT json_quote( 1, 2 );
Kết quả:
Parse error: wrong number of arguments to function json_quote() SELECT json_quote( 1, 2 ); ^--- error here