Mysql
 sql >> база данни >  >> RDS >> Mysql

JSON_VALUE() в MySQL

В MySQL, JSON_VALUE() функцията извлича стойност от JSON документ по посочения път.

Функцията е въведена в MySQL 8.0.21.

Синтаксис

Синтаксисът е така:

JSON_VALUE(json_doc, path [RETURNING type] [on_empty] [on_error])

Къде:

on_empty:
    {NULL | ERROR | DEFAULT value} ON EMPTY

on_error:
    {NULL | ERROR | DEFAULT value} ON ERROR

Пример

Ето един прост пример за демонстрация:

SELECT JSON_VALUE( '{ "name" : "Wag", "type" : "Dog" }', '$.type' );

Резултат:

Dog

Масиви

Ето пример за получаване на стойност от масив:

SELECT JSON_VALUE( '{ "name" : "Wag", "scores" : [ 25, 36, 48 ] }', '$.scores[1]' );

Резултат:

36

Масивите са базирани на нула, така че 1 връща втория елемент (0 ще върне първия).

Вградени документи

Ето пример за получаване на стойност от вграден обект:

SELECT JSON_VALUE(
    '{ 
        "_id" : 1, 
        "details" : { 
            "name" : "Wag",
            "type" : "Dog"
            } 
    }', 
    '$.details.type' 
    );

Резултат:

Dog

Тип връщане

Ето пример за определяне на типа на връщане:

SELECT JSON_VALUE(
    '{ 
        "_id" : 1, 
        "details" : { 
            "name" : "Wag",
            "type" : "Dog"
            } 
    }', 
    '$.details' RETURNING json
    );

Резултат:

{"name": "Wag", "type": "Dog"}

Ако не посочите типа на връщане, типът на връщане е VARCHAR(512) .

Празни резултати

По подразбиране, ако не бъдат намерени данни на посочения път, NULL се връща:

SELECT JSON_VALUE(
    '{ 
        "name" : "Wag",
        "type" : "Dog"
    }', 
    '$.score'
    );

Резултат:

NULL

Въпреки това, следните опции могат да се използват за изрично уточняване какво трябва да се случи, когато не бъдат намерени данни на дадения път:

  • NULL ON EMPTY :Функцията връща NULL; това е поведението по подразбиране.
  • DEFAULT value НА ПРАЗНО :предоставената value се връща. Типът на стойността трябва да съвпада с този на връщания тип.
  • ERROR ON EMPTY :Функцията извежда грешка.

Пример:

SELECT JSON_VALUE(
    '{ 
        "name" : "Wag",
        "type" : "Dog"
    }', 
    '$.score' 
    DEFAULT 'Nothing found' ON EMPTY
    );

Резултат:

Nothing found

Грешки

Следното може да се използва, за да посочите какво се случва, когато възникне грешка:

  • NULL ON ERROR :JSON_VALUE() връща NULL; това е поведението по подразбиране.
  • DEFAULT value ПРИ ГРЕШКА :Това е върнатата стойност; стойността му трябва да съвпада с тази на връщания тип.
  • ERROR ON ERROR :Получава се грешка.

Ако се използва, ON EMPTY трябва да предхожда всеки ON ERROR клауза. Посочването им в грешен ред води до синтактична грешка.

Индекси

Както е споменато в бележките за версията на MySQL 8.0.21, JSON_VALUE() функцията опростява създаването на индекси в JSON колони. Извикване на JSON_VALUE(json_doc). , path ВРЪЩАНЕ на type ) е еквивалентно на извикване на CAST( JSON_UNQUOTE( JSON_EXTRACT(json_doc) , path ) ) КАТО type ) .

Ето примера, използван в бележките към изданието:

CREATE TABLE inventory(
    items JSON,
    INDEX i1 ( (JSON_VALUE(items, '$.name' RETURNING CHAR(50))) ),
    INDEX i2 ( (JSON_VALUE(items, '$.price' RETURNING DECIMAL(5,2))) ),
    INDEX i3 ( (JSON_VALUE(items, '$.quantity' RETURNING UNSIGNED)) )
);

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използвате ли LIMIT в рамките на GROUP BY, за да получите N резултата на група?

  2. Как да изберете най-новия набор от датирани записи от таблица на mysql

  3. Генерирайте целочислена последователност в MySQL

  4. Вмъкване в няколко таблици в една заявка

  5. Използване на псевдоним в SQL изчисления