All Products
Search
Document Center

AnalyticDB:Fungsi JSON

Last Updated:Apr 23, 2026

Topik ini menjelaskan fungsi JSON yang didukung oleh kluster AnalyticDB for MySQL.

  • JSON_ARRAY_CONTAINS: Memeriksa apakah array JSON berisi nilai value yang ditentukan.

  • JSON_ARRAY_LENGTH: Mengembalikan panjang array JSON.

  • JSON_CONTAINS (untuk versi 3.1.5.0 dan yang lebih baru): Memeriksa apakah path yang ditentukan berisi nilai candidate. Jika tidak ada path yang ditentukan, fungsi ini memeriksa apakah target berisi nilai candidate.

  • JSON_CONTAINS_PATH (untuk versi 3.1.5.0 dan yang lebih baru): Memeriksa apakah dokumen JSON berisi salah satu atau semua path yang ditentukan.

  • JSON_EXTRACT: Mengekstraksi data dari dokumen JSON pada path json_path yang ditentukan.

  • JSON_KEYS: Jika json_path ditentukan, fungsi ini mengembalikan semua kunci dari path yang ditentukan dalam dokumen JSON. Jika json_path tidak ditentukan, fungsi ini mengembalikan semua kunci dari path root (json_path='$').

  • JSON_OVERLAPS (untuk versi 3.1.10.6 dan yang lebih baru): Memeriksa apakah dokumen JSON berisi salah satu elemen yang ditentukan, seperti candidate1, candidate2, atau candidate3.

  • JSON_REMOVE (untuk versi 3.1.10.0 dan yang lebih baru): Menghapus elemen pada path json_path yang ditentukan dari dokumen json dan mengembalikan string yang telah dimodifikasi. Anda dapat menentukan beberapa elemen untuk dihapus menggunakan `array[json_path,json_path,...]`.

  • JSON_SIZE: Mengembalikan ukuran objek atau array JSON pada path json_path yang ditentukan.

  • JSON_SET (untuk versi 3.2.2.8 dan yang lebih baru): Menyisipkan atau memperbarui data dalam dokumen json pada path json_path yang ditentukan dan mengembalikan dokumen json yang telah diperbarui.

  • JSON_UNQUOTE (versi 3.2.2.11 dan yang lebih baru): Menghapus tanda kutip ganda dari json_value, meng-unescape karakter escape tertentu dalam json_value, dan mengembalikan nilai hasilnya.

JSON_ARRAY_CONTAINS

json_array_contains(json, value)
  • Deskripsi: Memeriksa apakah array JSON berisi nilai value yang ditentukan.

  • Tipe nilai input: value dapat berupa tipe numerik, string, atau BOOLEAN.

  • Tipe nilai kembali: BOOLEAN.

  • Contoh:

    • Periksa apakah array JSON [1, 2, 3] berisi elemen `2`. Pernyataannya adalah sebagai berikut:

      SELECT json_array_contains('[1, 2, 3]', 2);

      Hasil berikut dikembalikan:

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

JSON_ARRAY_LENGTH

json_array_length(json)
  • Deskripsi: Mengembalikan panjang array JSON.

  • Tipe nilai input: String atau JSON.

  • Tipe nilai kembali: BIGINT.

  • Contoh:

    • Kembalikan panjang array JSON [1, 2, 3]. Pernyataannya adalah sebagai berikut:

      SELECT json_array_length('[1, 2, 3]');

      Hasil berikut dikembalikan:

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

JSON_CONTAINS

Fungsi `JSON_CONTAINS` memeriksa apakah dokumen JSON yang ditentukan berisi nilai tertentu. Anda dapat menggunakan indeks array JSON dalam kueri untuk menghindari pemindaian tabel penuh atau penguraian seluruh dokumen JSON, sehingga meningkatkan efisiensi kueri.

Tanpa indeks JSON

Penting

Sintaks ini hanya didukung di kluster dengan versi kernel 3.1.5.0 atau yang lebih baru.

Untuk melihat dan memperbarui versi minor, buka bagian Configuration Information pada halaman Cluster Information di AnalyticDB for MySQL console.

json_contains(target, candidate[, json_path])
  • Deskripsi:

    • Jika json_path ditentukan, fungsi ini memeriksa apakah path yang ditentukan berisi nilai candidate. Fungsi ini mengembalikan `1` jika nilai tersebut terdapat dan `0` jika tidak.

    • Jika json_path tidak ditentukan, fungsi ini memeriksa apakah target berisi nilai candidate. Fungsi ini mengembalikan `1` jika nilai tersebut terdapat dan `0` jika tidak.

    Aturannya adalah sebagai berikut:

    • Jika target dan candidate keduanya merupakan tipe primitif (NUMBER, BOOLEAN, STRING, atau NULL), target dianggap berisi candidate jika keduanya sama.

    • Jika target dan candidate keduanya merupakan array JSON, target dianggap berisi candidate jika semua elemen `candidate` terdapat dalam elemen mana pun dari `target`.

    • Jika target adalah array dan candidate bukan array, target dianggap berisi candidate jika `candidate` terdapat dalam elemen mana pun dari `target`.

    • Jika target dan candidate keduanya merupakan objek JSON, target dianggap berisi candidate jika setiap kunci dalam `candidate` juga terdapat dalam `target`, dan nilai untuk setiap kunci dalam `candidate` terdapat dalam nilai untuk kunci yang sesuai dalam `target`.

  • Tipe nilai input: target dan candidate bertipe JSON. json_path bertipe JSONPATH.

  • Tipe nilai kembali: BOOLEAN.

  • Contoh:

    • Periksa apakah path $.a berisi nilai `1`. Pernyataannya adalah sebagai berikut:

      SELECT json_contains(json '{"a": 1, "b": 2, "c": {"d": 4}}', json '1', '$.a') as result;

      Hasil berikut dikembalikan:

      +--------+
      | result |
      +--------+
      |      1 |
      +--------+
    • Periksa apakah path $.b berisi nilai `1`. Pernyataannya adalah sebagai berikut:

      SELECT json_contains(json '{"a": 1, "b": 2, "c": {"d": 4}}', json '1', '$.b') as result;

      Hasil berikut dikembalikan:

      +--------+
      | result |
      +--------+
      |      0 |
      +--------+
    • Periksa apakah {"d": 4} terdapat dalam target. Pernyataannya adalah sebagai berikut:

      SELECT json_contains(json '{"a": 1, "b": 2, "c": {"d": 4}}', json '{"d": 4}') as result;

      Hasil berikut dikembalikan:

      +--------+
      | result |
      +--------+
      |      0 |
      +--------+

Menggunakan indeks array JSON

Penting
  • Sintaks ini hanya didukung di kluster dengan versi kernel 3.1.10.6 atau yang lebih baru.

  • Indeks array JSON harus dibuat untuk kolom JSON yang ditentukan. Untuk informasi selengkapnya, lihat Create a JSON array index.

  • Anda dapat menambahkan EXPLAIN sebelum pernyataan kueri SQL Anda untuk melihat rencana eksekusi. Jika rencana eksekusi tidak berisi operator `ScanFilterProject`, indeks array JSON berhasil digunakan. Jika tidak, indeks tersebut tidak digunakan.

json_contains(json_path, cast('[candidate1,candidate2,candidate3]' as json)) 
  • Deskripsi: Memeriksa apakah dokumen JSON yang ditentukan berisi semua elemen yang ditentukan, seperti candidate1, candidate2, dan candidate3.

  • Tipe data nilai input: Nilai candidate1,candidate2,candidate3,... semuanya harus memiliki tipe data yang sama, baik numerik maupun string.

  • Tipe nilai kembali: VARCHAR.

  • Contoh:

    • Periksa apakah kolom JSON yang ditentukan vj berisi CP-018673 dan CP-018671.

      SELECT  json_contains(vj, cast('["CP-018673","CP-018671"]' AS json)) FROM json_test;

      Hasil berikut dikembalikan:

      +------------------------------------------------------------+
      |json_contains(vj, cast('["CP-018673","CP-018671"]' AS json))|                                                                    |
      +------------------------------------------------------------+
      |                    0                                       |
      +------------------------------------------------------------+
      |                    0                                       |
      +------------------------------------------------------------+
      |                    1                                       |
      +------------------------------------------------------------+
      |                    0                                       |
      +------------------------------------------------------------+
      |                    0                                       |
      +------------------------------------------------------------+
    • Periksa apakah kolom JSON yang ditentukan vj berisi CP-018673, 1, dan 2.

      SELECT json_contains(vj, cast('["CP-018673",1,2]' AS json)) FROM json_test;

      Hasil berikut dikembalikan:

      +------------------------------------------------------------+
      |json_contains(vj, cast('["CP-018673","CP-018671"]' AS json))|                                                                    |
      +------------------------------------------------------------+
      |                    0                                       |
      +------------------------------------------------------------+
      |                    1                                       |
      +------------------------------------------------------------+
      |                    1                                       |
      +------------------------------------------------------------+
      |                    0                                       |
      +------------------------------------------------------------+
      |                    1                                       |
      +------------------------------------------------------------+

JSON_CONTAINS_PATH

json_contains_path(json, one_or_all, json_path[, json_path,...])
Penting

Fungsi ini hanya didukung di kluster dengan versi kernel 3.1.5.0 atau yang lebih baru.

Untuk melihat dan memperbarui versi minor, buka bagian Configuration Information pada halaman Cluster Information di AnalyticDB for MySQL console.

  • Deskripsi perintah: Memeriksa apakah path yang ditentukan ada dalam objek JSON.

    • Jika one_or_all diatur ke 'one', fungsi ini mengembalikan `1` jika dokumen JSON berisi salah satu dari path yang ditentukan. Jika tidak, fungsi ini mengembalikan `0`.

    • Jika one_or_all diatur ke 'all', fungsi ini mengembalikan `1` jika dokumen JSON berisi semua path yang ditentukan. Jika tidak, fungsi ini mengembalikan `0`.

  • Tipe nilai input: json bertipe JSON. one_or_all bertipe VARCHAR dan dapat berupa 'one' atau 'all' (tidak peka huruf besar/kecil). json_path adalah ekspresi path.

  • Tipe nilai kembali: BOOLEAN.

  • Contoh:

    • Periksa apakah dokumen JSON berisi setidaknya salah satu dari path $.a dan $.e. Pernyataannya adalah sebagai berikut:

      SELECT json_contains_path(json '{"a": 1, "b": 2, "c": {"d": 4}}', 'one', '$.a', '$.e') AS RESULT;

      Hasil berikut dikembalikan:

      +--------+
      | result |
      +--------+
      |      1 |
      +--------+
    • Periksa apakah dokumen JSON berisi kedua path $.a dan $.e. Pernyataannya adalah sebagai berikut:

      SELECT json_contains_path(json '{"a": 1, "b": 2, "c": {"d": 4}}', 'all', '$.a', '$.e') AS RESULT;

      Hasil berikut dikembalikan:

      +--------+
      | result |
      +--------+
      |      0 |
      +--------+

JSON_EXTRACT

Penting
  • Nilai kembali fungsi `JSON_EXTRACT`, mirip dengan kolom bertipe JSON, tidak mendukung ORDER BY.

  • Saat menggunakan fungsi `JSON_EXTRACT` bersama fungsi `JSON_UNQUOTE`, Anda harus terlebih dahulu menggunakan CAST AS VARCHAR untuk mengonversi nilai kembali `JSON_EXTRACT` ke tipe VARCHAR. Nilai yang dikonversi kemudian dapat digunakan sebagai parameter input untuk fungsi `JSON_UNQUOTE`.

json_extract(json, json_path)
  • Deskripsi: Mengekstraksi nilai dari dokumen JSON pada path json_path yang ditentukan. Jika kunci dalam dokumen json berisi karakter khusus, seperti $ atau ., format json_path harus berupa '$["Key"]'.

    Sebagai contoh, jika kuncinya adalah $data, `json_path` harus berupa '$["$data"]'.

  • Tipe nilai input: String atau JSON.

  • Tipe nilai kembali: JSON.

  • Contoh:

    • Kembalikan nilai pada path `$[0]` dari array [10, 20, [30, 40]]. Pernyataannya adalah sebagai berikut:

      SELECT json_extract('[10, 20, [30, 40]]', '$[0]');

      Hasil berikut dikembalikan:

      +-------------------------------------------+
      | json_extract('[10, 20, [30, 40]]', '$[0]') |
      +-------------------------------------------+
      |                     10                    |
      +-------------------------------------------+
    • Kembalikan nilai dari path `$date` dari {"id":"1","$date":"12345"}. Pernyataannya adalah sebagai berikut:

      SELECT JSON_EXTRACT('{"id":"1","$date":"12345"}', '$["$date"]');

      Hasil berikut dikembalikan:

      +---------------------------------------------------------+
      |JSON_EXTRACT('{"id":"1","$date":"12345"}', '$["$date"]') |
      +---------------------------------------------------------+
      |                       "12345"                           |
      +---------------------------------------------------------+

JSON_KEYS

json_keys(json[, json_path])
  • Deskripsi

    • Jika json_path ditentukan, fungsi ini mengembalikan semua kunci dari path yang ditentukan dalam dokumen JSON.

    • Jika json_path tidak ditentukan, fungsi ini mengembalikan semua kunci dari path root (json_path='$').

  • Tipe nilai input: Hanya parameter bertipe JSON yang didukung.

    Anda dapat membuat data JSON dengan cara berikut:

    • Gunakan data JSON secara langsung. Misalnya, json '{"a": 1, "b": {"c": 30}}'.

    • Konversi eksplisit string ke data JSON menggunakan fungsi CAST. Misalnya, CAST('{"a": 1, "b": {"c": 30}}' AS json).

  • Tipe nilai kembali: JSON ARRAY.

  • Contoh:

    • Kembalikan semua kunci dari path $.b. Pernyataannya adalah sebagai berikut:

      SELECT json_keys(CAST('{"a": 1, "b": {"c": 30}}' AS json),'$.b');

      Hasil berikut dikembalikan:

      +-----------------------------------------------------------+
      | json_keys(CAST('{"a": 1, "b": {"c": 30}}' AS json),'$.b') |
      +-----------------------------------------------------------+
      |                           ["c"]                           |
      +-----------------------------------------------------------+
    • Kembalikan semua kunci dari path root. Pernyataannya adalah sebagai berikut:

      SELECT JSON_KEYS(json '{"a": 1, "b": {"c": 30}}');

      Hasil berikut dikembalikan:

      +--------------------------------------------+
      | JSON_KEYS(json '{"a": 1, "b": {"c": 30}}') |
      +--------------------------------------------+
      |             ["a","b"]                      |
      +--------------------------------------------+

JSON_OVERLAPS

Penting
  • Sintaks ini hanya didukung di kluster dengan versi kernel 3.1.10.6 atau yang lebih baru.

  • Indeks array JSON harus dibuat untuk kolom JSON yang ditentukan. Untuk informasi selengkapnya, lihat Create a JSON array index.

  • Anda dapat menambahkan EXPLAIN sebelum pernyataan kueri SQL Anda untuk melihat rencana eksekusi. Jika rencana eksekusi tidak berisi operator `ScanFilterProject`, indeks array JSON berhasil digunakan. Jika tidak, indeks tersebut tidak digunakan.

json_overlaps(json, cast('[candidate1,candidate2,candidate]' as json)) 
  • Deskripsi: Memeriksa apakah dokumen JSON yang ditentukan berisi salah satu elemen yang ditentukan, seperti candidate1, candidate2, atau candidate3.

  • Tipe data nilai input: candidate1,candidate2,candidate3,... dapat berupa tipe numerik atau string, dan semua nilai harus memiliki tipe data yang sama.

  • Tipe nilai kembali: VARCHAR.

  • Contoh:

    • Kembalikan data dari kolom JSON yang ditentukan vj yang berisi CP-018673.

      SELECT * FROM json_test WHERE json_overlaps(vj, cast('["CP-018673"]' AS json));

      Hasil berikut dikembalikan:

      +-----+----------------------------------------------------------------------------+
      |  id |   vj                                                                       |
      +-----+----------------------------------------------------------------------------+
      |  2  | ["CP-018673", 1, false]                                                    |
      +-----+----------------------------------------------------------------------------+
      |  3  | ["CP-018673", 1, false, {"a": 1}]                                          |
      +-----+----------------------------------------------------------------------------+
      |  5  | ["CP-018673","CP-018671","CP-018672","CP-018670","CP-018669","CP-018668"]  |
      +-----+----------------------------------------------------------------------------+
    • Kembalikan data dari kolom JSON yang ditentukan vj yang berisi salah satu elemen 1, 2, atau 3.

      SELECT * FROM json_test WHERE json_overlaps(vj, cast('[1,2,3]' AS json))

      Hasil berikut dikembalikan:

      +-----+-------------------------------------+
      |  id |                 vj                  |
      +-----+-------------------------------------+
      |  1  | [1,2,3]                             |
      +-----+-------------------------------------+
      |  2  | ["CP-018673", 1, false]             |
      +-----+-------------------------------------+
      |  3  | ["CP-018673", 1, false, {"a": 1}]   |
      +-----+-------------------------------------+

JSON_REMOVE

Penting

Fungsi `JSON_REMOVE` hanya didukung di kluster dengan versi kernel 3.1.10.0 atau yang lebih baru.

Untuk melihat dan memperbarui versi minor, buka bagian Configuration Information pada halaman Cluster Information di AnalyticDB for MySQL console.

json_remove(json,json_path)
json_remove(json,array[json_path,json_path,...])
  • Deskripsi: Menghapus elemen pada path json_path yang ditentukan dari dokumen json dan mengembalikan string yang telah dimodifikasi. Anda dapat menentukan beberapa elemen untuk dihapus menggunakan `array[json_path,json_path,...]`.

  • Tipe nilai input: json adalah string VARCHAR dalam format JSON. json_path adalah string VARCHAR dalam format JSON.

  • Tipe nilai kembali: VARCHAR.

  • Contoh

    • Hapus elemen pada path $.glossary.GlossDiv dan kembalikan string yang telah dimodifikasi. Pernyataannya adalah sebagai berikut:

        SELECT json_remove(
        '{
            "glossary": {
                "title": "example glossary",
                "GlossDiv": {
                    "title": "S",
                    "GlossList": {
                        "GlossEntry": {
                            "ID": "SGML",
                            "SortAs": "SGML",
                            "GlossTerm": "Standard Generalized Markup Language",
                            "Acronym": "SGML",
                            "Abbrev": "ISO 8879:1986",
                            "GlossDef": {
                                "para": "A meta-markup language, used to create markup languages such as DocBook.",
                                "GlossSeeAlso": ["GML", "XML"]
                            },
                            "GlossSee": "markup"
                        }
                    }
                }
            }
        }'
        , '$.glossary.GlossDiv') a;

      Hasil berikut dikembalikan:

      {"glossary":{"title":"example glossary"}}
    • Hapus elemen pada path $.glossary.title dan $.glossary.GlossDiv.title dan kembalikan string yang telah dimodifikasi. Pernyataannya adalah sebagai berikut:

      SELECT json_remove(
        '{
            "glossary": {
                "title": "example glossary",
                "GlossDiv": {
                    "title": "S",
                    "GlossList": {
                        "GlossEntry": {
                            "ID": "SGML",
                            "SortAs": "SGML",
                            "GlossTerm": "Standard Generalized Markup Language",
                            "Acronym": "SGML",
                            "Abbrev": "ISO 8879:1986",
                            "GlossDef": {
                                "para": "A meta-markup language, used to create markup languages such as DocBook.",
                                "GlossSeeAlso": ["GML", "XML"]
                            },
                            "GlossSee": "markup"
                        }
                    }
                }
            }
        }'
        , array['$.glossary.title', '$.glossary.GlossDiv.title']) a;

      Hasil berikut dikembalikan:

      {"glossary":{"GlossDiv":{"GlossList":{"GlossEntry":{"GlossTerm":"Standard Generalized Markup Language","GlossSee":"markup","SortAs":"SGML","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"ID":"SGML","Acronym":"SGML","Abbrev":"ISO 8879:1986"}}}}}

JSON_SIZE

json_size(json, json_path)
  • Deskripsi: Mengembalikan ukuran objek atau array JSON pada path json_path yang ditentukan.

    Catatan

    Jika json_path tidak menunjuk ke objek atau array JSON, fungsi ini mengembalikan `0`.

  • Tipe nilai input: String atau JSON.

  • Tipe nilai kembali: BIGINT.

  • Contoh:

    • json_path menunjuk ke objek JSON. Pernyataannya adalah sebagai berikut:

      SELECT json_size('{"x":{"a":1, "b": 2}}', '$.x') as result;

      Hasil berikut dikembalikan:

      +--------+
      | result |
      +--------+
      |      2 |
      +--------+
    • json_path tidak menunjuk ke objek atau array JSON. Pernyataannya adalah sebagai berikut:

      SELECT json_size('{"x": {"a": 1, "b": 2}}', '$.x.a') as result;

      Hasil berikut dikembalikan:

      +--------+
      | result |
      +--------+
      |      0 |
      +--------+

JSON_SET

Penting

Fungsi `JSON_SET` hanya didukung di kluster dengan versi kernel 3.2.2.8 atau yang lebih baru.

Untuk melihat dan memperbarui versi minor, buka bagian Configuration Information pada halaman Cluster Information di AnalyticDB for MySQL console.

json_set(json, json_path, value[, json_path, value] ...)
  • Deskripsi: Menyisipkan atau memperbarui data dalam dokumen json pada path json_path yang ditentukan dan mengembalikan dokumen json yang telah diperbarui.

    • Jika json atau json_path bernilai null, fungsi ini mengembalikan null.

    • Jika dokumen json tidak dalam format JSON yang valid, atau jika json_path mana pun bukan ekspresi path yang valid, pengecualian akan dilemparkan.

    • Jika path json_path yang ditentukan ada, nilainya akan ditimpa dengan value.

    • Jika path json_path yang ditentukan tidak ada dalam dokumen json:

      • Jika json_path menunjuk ke objek JSON, value ditambahkan sebagai elemen baru di lokasi yang ditentukan oleh json_path.

      • Jika json_path menunjuk ke array JSON, fungsi ini memeriksa apakah data sudah ada di posisi sebelum json_path yang ditentukan. Jika tidak ada data, nilai `null` ditambahkan untuk mengisi celah sebelum value disisipkan. Jika tidak, value disisipkan secara langsung.

      • Dalam kasus lain, pengecualian akan dilemparkan.

  • Tipe nilai input:

    • json: VARCHAR atau JSON.

    • json_path: VARCHAR.

    • value: BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, DECIMAL, VARCHAR, VARBINARY, DATE, DATETIME, TIMESTAMP, atau TIME.

  • Tipe nilai kembali: JSON.

  • Contoh:

    • Sisipkan data ke dokumen json di mana json_path bernilai null.

      SELECT JSON_SET('{ "a": 1, "b": [2, 3]}', null, '10');

      Hasil:

      +------------------------------------------------+
      | JSON_SET('{ "a": 1, "b": [2, 3]}', NULL, '10') |
      +------------------------------------------------+
      | null                                           |
      +------------------------------------------------+
    • Sisipkan data ke dokumen json di mana json_path bukan ekspresi path yang valid.

      SELECT JSON_SET('{ "a": 1, "b": [2, 3]}', '$.b.c', '10');

      Hasil:

      Failed to execute json_set() for json_path: $.b.c
    • Sisipkan data ke dokumen json di mana json_path1 ada, dan json_path2 tidak ada dan menunjuk ke objek JSON.

      SELECT JSON_SET('{ "a": 1, "b": [2, 3]}', '$.a', 10, '$.c', '[true, false]');

      Hasil:

      +-----------------------------------------------------------------------+
      | JSON_SET('{ "a": 1, "b": [2, 3]}', '$.a', 10, '$.c', '[true, false]') |
      +-----------------------------------------------------------------------+
      | {"a":10,"b":[2,3],"c":"[true, false]"}                                |
      +-----------------------------------------------------------------------+
    • Sisipkan data ke dokumen json di mana json_path yang ditentukan tidak ada dan menunjuk ke array JSON.

      SELECT JSON_SET('{ "a": 1, "b": [2, 3]}',  '$.b[4]', '[true, false]');

      Hasil:

      +----------------------------------------------------------------+
      | JSON_SET('{ "a": 1, "b": [2, 3]}',  '$.b[4]', '[true, false]') |
      +----------------------------------------------------------------+
      | {"a":1,"b":[2,3,null,null,"[true, false]"]}                    |
      +----------------------------------------------------------------+

JSON_UNQUOTE

json_unquote(json_value)
Penting

Fungsi ini hanya didukung di kluster dengan versi kernel 3.1.5.0 atau yang lebih baru.

Untuk melihat dan memperbarui versi minor, buka bagian Configuration Information pada halaman Cluster Information di AnalyticDB for MySQL console.

  • Perintah ini menghapus tanda kutip ganda dari json_value, meng-unescape karakter escape tertentu, dan mengembalikan nilai hasilnya.

    AnalyticDB for MySQL tidak memvalidasi json_value. Fungsi ini memproses nilai berdasarkan logika yang dijelaskan, terlepas dari apakah json_value sesuai dengan sintaks JSON.

    Karakter escape yang didukung tercantum dalam tabel berikut.

    Sebelum unescape

    Setelah unescaping

    \"

    Tanda kutip ganda (").

    \b

    Backspace.

    \f

    Form feed.

    \n

    Line feed.

    \r

    Carriage return.

    \t

    Tab.

    \\

    Backslash (\).

    \uXXXX

    Representasi karakter UTF-8.

  • Tipe nilai input: VARCHAR.

  • Tipe nilai kembali: VARCHAR.

  • Contoh:

    • Kembalikan string tanpa tanda kutip abc. Pernyataannya adalah sebagai berikut:

      SELECT json_unquote('"abc"');

      Hasil berikut dikembalikan:

      +-----------------------+
      | json_unquote('"abc"') |
      +-----------------------+
      |          abc          |
      +-----------------------+
    • Pernyataan berikut mengembalikan string yang telah di-unquote dan diurai:

      SELECT json_unquote('"\\t\\u0032"');

      Hasilnya adalah sebagai berikut:

      +------------------------------+
      | json_unquote('"\\t\\u0032"') |
      +------------------------------+
      |               2              |
      +------------------------------+

Lampiran: Sintaks JSON Path

Penggunaan

  • Gunakan $.keyName[.keyName]... untuk mengakses kunci tertentu dalam objek JSON.

  • Gunakan $[nonNegativeInteger] untuk mengakses elemen ke-N dalam array JSON, di mana n adalah bilangan bulat non-negatif.

  • Gunakan $.keyName[.keyName]...[nonNegativeInteger] untuk mengakses elemen ke-N dari array JSON yang bersarang dalam objek JSON, di mana n adalah bilangan bulat non-negatif.

Catatan

Sintaks JSON Path di AnalyticDB for MySQL tidak mendukung karakter wildcard * dan **. Artinya, ekspresi seperti '$.*', '$.hobbies[*]', '$.address.**', dan '$.hobbies.**' tidak didukung.

Contoh

Asumsikan Anda memiliki data JSON berikut.

{
    "name": "Alice",
    "age": 25,
    "address": {
        "city": "Hangzhou",
        "zip": "10001"
    },
    "hobbies":["reading", "swimming", "cycling"]
}

Deskripsi

Contoh yang benar

Contoh yang salah

Akses nilai kunci `name`

$.name

name

Akses nilai kunci `city` dalam objek bersarang

$.address.city

$.address[0]

Akses elemen pertama dari array JSON `hobbies`

$.hobbies[0]

$.hobbies.[0]

FAQ

Bagaimana cara mengatasi error java.lang.NullPointerException saat menggunakan fungsi JSON_OVERLAPS?

Penyebab: Error ini terjadi jika Anda menggunakan pernyataan `ALTER` untuk membuat indeks JSON, tetapi operasi `BUILD` belum dieksekusi atau belum selesai. Dalam hal ini, indeks JSON belum aktif.

Solusi:

  • Jika operasi `BUILD` belum dieksekusi:

    Kluster AnalyticDB for MySQL secara otomatis memicu tugas `BUILD` ketika kondisi tertentu terpenuhi. Anda juga dapat memancing tugas `BUILD` secara manual.

  • Jika operasi `BUILD` telah dieksekusi:

    Anda dapat menjalankan pernyataan berikut untuk menanyakan status tugas `BUILD`. Jika bidang status dalam hasil yang dikembalikan adalah FINISH, operasi `BUILD` telah selesai.

    SELECT table_name, schema_name, status FROM INFORMATION_SCHEMA.KEPLER_META_BUILD_TASK ORDER BY create_time DESC LIMIT 10;

Untuk informasi selengkapnya tentang `BUILD`, lihat BUILD.

Referensi

  • JSON: Menjelaskan tipe data JSON.

  • JSON indexes: Menjelaskan cara membuat indeks untuk objek dan array JSON.