MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

Cách trả về các phần tử từ một mảng JSON trong MariaDB

MariaDB bao gồm hai bộ chọn cho phép chúng tôi chọn các phần tử từ mảng JSON:

  • [N] chọn số phần tử N trong mảng (ví dụ:[0] để chọn phần tử đầu tiên).
  • [*] chọn tất cả các phần tử trong mảng.

Chúng có thể được sử dụng trong một số hàm JSON có trong MariaDB. Các ví dụ sau sử dụng chúng với JSON_EXTRACT() để trả về các phần tử mảng đã chọn.

Ví dụ - [N]

Dưới đây là một ví dụ đơn giản để minh họa cách chọn một phần tử mảng đơn lẻ:

SELECT JSON_EXTRACT('[1,2,3]', '$[1]');

Kết quả:

+---------------------------------+
| JSON_EXTRACT('[1,2,3]', '$[1]') |
+---------------------------------+
| 2                               |
+---------------------------------+

Mảng dựa trên 0 và vì vậy $[1] chọn phần tử mảng thứ hai.

Đây là một ví dụ khác, lần này sử dụng tài liệu JSON lớn hơn một chút:

SET @json = '
    { 
        "_id": 1, 
        "product": "Left Handed Screwdriver", 
        "sizes": [ "S", "M", "L" ] 
    }
';

SELECT JSON_EXTRACT(@json, '$.sizes[1]');

Kết quả:

+-----------------------------------+
| JSON_EXTRACT(@json, '$.sizes[1]') |
+-----------------------------------+
| "M"                               |
+-----------------------------------+

Trong trường hợp này, .sizes chỉ định các kích thước sizes thành viên đối tượng, và vì vậy $.sizes[1] chọn mục thứ hai trong các kích thước sizes mảng.

Ví dụ- [*]

[*] bộ chọn chọn tất cả các phần tử trong mảng.

Ví dụ:

SET @json = '
    { 
        "_id": 1, 
        "product": "Left Handed Screwdriver", 
        "sizes": [ "S", "M", "L" ] 
    }
';

SELECT JSON_EXTRACT(@json, '$.sizes[*]');

Kết quả:

+-----------------------------------+
| JSON_EXTRACT(@json, '$.sizes[*]') |
+-----------------------------------+
| ["S", "M", "L"]                   |
+-----------------------------------+

Trong trường hợp này, kết quả trông giống hệt như mảng ban đầu, trong trường hợp đó, nó có thể được trả về chỉ bằng cách chỉ định $.sizes .

Nhiều bộ chọn mảng

Nhưng đây là một ví dụ khác sử dụng hai bộ chọn mảng.

Đầu tiên, chúng tôi sử dụng bộ chọn ký tự đại diện để chọn tất cả các phần tử trong mảng. Sau đó, chúng tôi sử dụng một bộ chọn mảng khác để chỉ chọn phần tử thứ hai trong một mảng được lồng trong các phần tử đó:

SET @json = '
{ 
    "products" : 
    [
        { 
            "_id": 1, 
            "product": "Left Handed Screwdriver", 
            "sizes": [ "S", "M", "L" ] 
        },
        { 
            "_id": 2, 
            "product": "Long Weight", 
            "sizes": [ 8, 7, 10 ] 
        },
        { 
            "_id": 3, 
            "product": "Bottomless Coffee Cup", 
            "sizes": [ "Tall", "Grande", "Venti" ] 
        }
    ]
}
';

SELECT JSON_EXTRACT(@json, '$.products[*].sizes[1]');

Kết quả:

+-----------------------------------------------+
| JSON_EXTRACT(@json, '$.products[*].sizes[1]') |
+-----------------------------------------------+
| ["M", 7, "Grande"]                            |
+-----------------------------------------------+

Bước ký tự đại diện

Nếu tài liệu JSON của bạn chứa nhiều mảng có cùng tên, một số mảng được lồng ở các cấp khác nhau hoặc trong đối tượng riêng của chúng, bạn có thể chọn tất cả chúng với sự trợ giúp của bước ký tự đại diện (** ). Bước ký tự đại diện chọn đệ quy tất cả các phần tử con của phần tử hiện tại.

Ở đây, chúng tôi sử dụng nó để giúp xây dựng biểu thức JSONPath trả về phần tử mảng thứ hai từ tất cả các mảng được gọi là sizes , bao gồm các mảng được lồng trong các tài liệu khác:

SET @json = '[
    { 
        "_id": 1, 
        "product": { 
            "name" : "Tuxedo", 
            "color" : "Blue",
            "sizes": [ "S", "M", "L" ],
            "accessories" : {
                "belt" : {
                    "color" : "Navy",
                    "sizes" : [ "Wide", "Narrow" ]
                },
                "tie" : {
                    "color" : "Black",
                    "sizes" : [ "Short", "Medium", "Long" ]
                }
            }
        }
    }
]';

SELECT JSON_EXTRACT(@json, '$**.sizes[1]');

Kết quả:

+-------------------------------------+
| JSON_EXTRACT(@json, '$**.sizes[1]') |
+-------------------------------------+
| ["M", "Narrow", "Medium"]           |
+-------------------------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sửa lỗi 1064 (42000) khi sử dụng Toán tử MINUS trong MariaDB

  2. Cách triển khai cơ sở dữ liệu Chamilo MariaDB để có tính khả dụng cao

  3. Xây dựng chế độ chờ nóng trên Amazon AWS bằng MariaDB Cluster

  4. Làm thế nào để ghi một số với Zeros hàng đầu trong MariaDB

  5. 4 chức năng để trả về tháng từ một ngày trong MariaDB