Trong SQLite, json_array_length()
hàm trả về số phần tử trong một mảng JSON nhất định.
Mảng được cung cấp dưới dạng một đối số. Nếu mảng được nhúng trong tài liệu JSON lớn hơn, chúng ta có thể sử dụng đối số thứ hai tùy chọn để chỉ định đường dẫn đến mảng.
Nếu giá trị không phải là một mảng, hàm trả về 0
.
Cú pháp
Hàm có thể được sử dụng theo hai cách sau:
json_array_length(X)
json_array_length(X,P)
Ở đâu X
đại diện cho mảng và P
là một đường dẫn tùy chọn có thể được sử dụng để chỉ định đường dẫn đến mảng trong tài liệu lớn hơn.
Ví dụ
Dưới đây là một ví dụ cơ bản để chứng minh:
SELECT json_array_length('[ 7, 12, 10 ]');
Kết quả:
3
Mảng chứa ba phần tử và vì vậy 3
được trả lại.
Chỉ định một đường dẫn
Chúng ta cũng có thể sử dụng đối số thứ hai để chỉ định đường dẫn đến mảng:
SELECT json_array_length('[ 7, 12, 10 ]', '$');
Kết quả:
3
Trong trường hợp này, mảng ở cấp cao nhất và do đó chúng tôi chuyển $
dưới dạng đường dẫn.
Ví dụ sau sử dụng một mảng được nhúng trong tài liệu lớn hơn:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs'
);
Kết quả:
3
Trong trường hợp này, mảng tại dogs
chứa ba phần tử.
Chúng tôi có thể điều hướng xuống cấp độ tiếp theo và tìm số phần tử trong một trong các mảng khác:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs[1].scores'
);
Kết quả:
4
Mảng dựa trên 0 và do đó, số lượng bắt đầu từ 0
. Do đó, chúng tôi đã chỉ định [1]
để lấy phần tử thứ hai trong dogs
mảng, tình cờ là một đối tượng JSON. Sau đó, chúng tôi sử dụng .scores
để chọn mảng của nó.
Chọn Không phải Mảng
Nếu đường dẫn trỏ đến một giá trị không phải là một mảng JSON, 0
được trả lại:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs[1].name'
);
Kết quả:
0
Chọn một đường dẫn không tồn tại
Nếu đối số thứ hai trỏ đến một đường dẫn không tồn tại, null
được trả lại.
Đầu tiên, hãy đặt .nullvalue
thành NULL
:
.nullvalue NULL
.nullvalue
lệnh dot cho phép chúng tôi cung cấp một chuỗi sẽ được sử dụng để thay thế các giá trị null. Đó là một trong số cách bạn có thể thay thế các giá trị null bằng một chuỗi trong SQLite. Trong trường hợp này, tôi đặt nó thành NULL
. Bây giờ, mọi giá trị null sẽ trả về NULL
thay vì một kết quả trống.
Bây giờ chúng ta hãy gọi json_array_length()
, nhưng sử dụng đối số thứ hai trỏ đến một đường dẫn không tồn tại:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.cats'
);
Kết quả:
NULL
Đường dẫn không hợp lệ
Chúng tôi sẽ gặp lỗi nếu đường dẫn của chúng tôi không đúng:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'dogs'
);
Kết quả:
Runtime error: JSON path error near 'dogs'
Trong trường hợp này, tôi đã quên bao gồm $.
ở phía trước của con đường.
Tài liệu JSON không hợp lệ
Chúng tôi cũng sẽ gặp lỗi do JSON không được định dạng tốt:
SELECT json_array_length('{ "Dogs" : }',
'$'
);
Kết quả:
Runtime error: malformed JSON
Lần này, lỗi cho chúng tôi biết rằng JSON của chúng tôi không đúng định dạng.