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

Nhận các khóa Json trong MySQL cho một giá trị cụ thể

Giống như tôi đã nói, nó có thể là một thách thức khi phân tích cú pháp JSON trong MySQL khi bạn đang xử lý các khóa dựa trên văn bản ở đây.
Vì vậy, bạn sẽ cần sử dụng JSON_KEYS() để kết hợp với một trình tạo số, một đường dẫn JSON động sẽ được tạo để sử dụng trong JSON_EXTRACT()

MySQL's 8 function JSON_TABLE() làm cho nó dễ dàng hơn nhiều ..

Truy vấn

 SELECT
  JSON_UNQUOTE(
    JSON_EXTRACT(json ,  CONCAT('$.', SUBSTRING_INDEX(
       SUBSTRING_INDEX(json_parsed, ',', number_generator.number)
       , ','
       , -1
     ), '.name'))) AS name
FROM (

  SELECT 
   @row := @row + 1 AS number
  FROM (
    SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION   SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
  ) row1
  CROSS JOIN (
    SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION  SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
  ) row2
  CROSS JOIN (
    SELECT @row := 0 
  ) init_user_params 
) AS number_generator
CROSS JOIN (

    SELECT  
        SUBSTRING(json_keys, 2, json_keys_length - 2) AS json_parsed
      , json_keys
      , json
      , JSON_LENGTH(json_keys) AS json_array_length                       
    FROM (
       SELECT 
            JSON_KEYS(record.json) AS json_keys
          , json
          , LENGTH(JSON_KEYS(record.json)) AS json_keys_length
       FROM (
          SELECT 
             '{
                "Intitule": {
                   "name": "Intitule de la formation",
                   "stats": false,
                   "is_array": false,
                   "is_filter": true,
                   "chart": "pie",
                   "col": "6"
                },
                "Fin": {
                    "name": "Date de fin",
                    "stats": false,
                    "is_array": false,
                    "is_filter": false,
                    "chart": "pie",
                    "col": "6"
                    }
                }' AS json
          FROM  
            DUAL  
       ) AS record                     
    ) AS json_information  
  ) AS json_init
WHERE
   number_generator.number BETWEEN 0 AND json_array_length
 AND
   JSON_EXTRACT(json ,  CONCAT('$.', SUBSTRING_INDEX(
     SUBSTRING_INDEX(json_parsed, ',', number_generator.number)
     , ','
     , -1
   ), '.is_filter')) = true 

Kết quả

| name                     |
| ------------------------ |
| Intitule de la formation |

xem bản trình diễn



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql:whoami?

  2. Mysql chèn ngày giờ ngẫu nhiên trong một phạm vi ngày giờ nhất định

  3. Tương đương với RowID của Oracle trong MySQL

  4. Chia bản ghi thành hai cột

  5. tạo một bản ghi mysql nếu nó không tồn tại, nếu không hãy cập nhật nó