sql >> Database >  >> RDS >> MariaDB

MariaDB JSON_TYPE() uitgelegd

In MariaDB, JSON_TYPE() is een ingebouwde functie die het type JSON-waarde als een tekenreeks retourneert.

Syntaxis

De syntaxis gaat als volgt:

JSON_TYPE(json_val)

Waar json_val is de waarde waarvoor het type moet worden geretourneerd.

Objecttypen

De mogelijke retourtypes staan ​​vermeld in de volgende tabel:

Retourtype Waarde Voorbeeld
ARRAY JSON-array. [1, 2, 3]
OBJECT JSON-object. {"a":"1"}
BOOLEAN JSON waar/onwaar letterlijk. true of false
DOUBLE Een getal met ten minste één decimaal met drijvende komma. 1.2
INTEGER Een getal zonder drijvende komma decimaal. 1
NULL JSON null letterlijk. Dit wordt geretourneerd als een tekenreeks en moet niet worden verward met de SQL NULL waarde. null
STRING JSON-tekenreeks. "bird"

Voorbeeld

Hier is een voorbeeld om te demonstreren.

SET @json = '
    { 
        "name" : "Fluffy", 
        "type" : "Cat" 
    }
';

SELECT JSON_TYPE(@json);

Resultaat:

+------------------+
| JSON_TYPE(@json) |
+------------------+
| OBJECT           |
+------------------+

In dit voorbeeld heb ik een heel JSON-document doorgegeven, met het type OBJECT .

Hier zijn meer voorbeelden:

SELECT 
    JSON_TYPE('[1, 2, 3]'),
    JSON_TYPE('{ "a" : 1 }'),
    JSON_TYPE('true'),
    JSON_TYPE('false'),
    JSON_TYPE(10.59),
    JSON_TYPE(10),
    JSON_TYPE(null),
    JSON_TYPE('"Fuzzy Smith"');

Resultaat (met verticale uitvoer):

    JSON_TYPE('[1, 2, 3]'): ARRAY
  JSON_TYPE('{ "a" : 1 }'): OBJECT
         JSON_TYPE('true'): BOOLEAN
        JSON_TYPE('false'): BOOLEAN
          JSON_TYPE(10.59): DOUBLE
             JSON_TYPE(10): INTEGER
           JSON_TYPE(null): NULL
JSON_TYPE('"Fuzzy Smith"'): STRING

De waarde extraheren uit een JSON-document

In de vorige voorbeelden heb ik elke waarde als een letterlijke waarde rechtstreeks aan de functie doorgegeven.

We kunnen JSON_TYPE() combine combineren met andere functies, zoals JSON_EXTRACT() om het type waarde binnen een groter JSON-document te achterhalen. Hier is een voorbeeld van het extraheren van een waarde uit een JSON-document om het type te achterhalen:

SET @json = '
    { 
        "name" : "Wag", 
        "scores" : [8, 0, 9] 
    }
';

SELECT 
    JSON_TYPE(JSON_EXTRACT(@json, '$.name')) AS Result;

Resultaat:

+--------+
| Result |
+--------+
| STRING |
+--------+

Hier is nog een voorbeeld dat meer typen retourneert:

SET @json = '
    { 
        "name" : "Wag", 
        "scores" : [8, 0, 9],
        "weight" : 10.50,
        "height" : null,
        "age" : 4
    }
';

SELECT 
    JSON_TYPE(
        JSON_EXTRACT(@json, '$.name')
        ) AS a,
    JSON_TYPE(
        JSON_EXTRACT(@json, '$.scores')
        ) AS b,
    JSON_TYPE(
        JSON_EXTRACT(@json, '$.scores[0]')
        ) AS c,
    JSON_TYPE(
        JSON_EXTRACT(@json, '$.weight')
        ) AS d,
    JSON_TYPE(
        JSON_EXTRACT(@json, '$.height')
        ) AS e,
    JSON_TYPE(
        JSON_EXTRACT(@json, '$.age')
        ) AS f;

Resultaat:

+--------+-------+---------+--------+------+---------+
| a      | b     | c       | d      | e    | f       |
+--------+-------+---------+--------+------+---------+
| STRING | ARRAY | INTEGER | DOUBLE | NULL | INTEGER |
+--------+-------+---------+--------+------+---------+

Nullargument

Als het argument null is , dan null wordt geretourneerd.

SELECT JSON_TYPE(null);

Resultaat:

+-----------------+
| JSON_TYPE(null) |
+-----------------+
| NULL            |
+-----------------+

Onjuist aantal parameters

Aanroepen van JSON_TYPE() zonder een argument resulteert in een fout:

SELECT JSON_TYPE();

Resultaat:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_TYPE'

Het is hetzelfde als er te veel argumenten worden doorgegeven:

SELECT JSON_TYPE(1, 2);

Resultaat:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_TYPE'

  1. Hoe u de grootte van een tabel in MySQL kunt krijgen

  2. Schakel SQL Server Agent in via SSMS

  3. Hoe voer ik één keer een opgeslagen procedure uit voor elke rij die door een query wordt geretourneerd?

  4. Hoe een record invoegen en de nieuw gemaakte ID retourneren met een enkele SqlCommand?