Topik ini menjelaskan fungsi JSON yang didukung oleh kluster AnalyticDB for MySQL.
JSON_ARRAY_CONTAINS: Memeriksa apakah array JSON berisi nilai
valueyang 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 nilaicandidate.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_pathyang ditentukan.JSON_KEYS: Jika
json_pathditentukan, fungsi ini mengembalikan semua kunci dari path yang ditentukan dalam dokumen JSON. Jikajson_pathtidak 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, ataucandidate3.JSON_REMOVE (untuk versi 3.1.10.0 dan yang lebih baru): Menghapus elemen pada path
json_pathyang ditentukan dari dokumenjsondan 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_pathyang ditentukan.JSON_SET (untuk versi 3.2.2.8 dan yang lebih baru): Menyisipkan atau memperbarui data dalam dokumen
jsonpada pathjson_pathyang ditentukan dan mengembalikan dokumenjsonyang 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 dalamjson_value, dan mengembalikan nilai hasilnya.
JSON_ARRAY_CONTAINS
json_array_contains(json, value)Deskripsi: Memeriksa apakah array JSON berisi nilai
valueyang ditentukan.Tipe nilai input:
valuedapat 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
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_pathditentukan, fungsi ini memeriksa apakah path yang ditentukan berisi nilaicandidate. Fungsi ini mengembalikan `1` jika nilai tersebut terdapat dan `0` jika tidak.Jika
json_pathtidak ditentukan, fungsi ini memeriksa apakah target berisi nilaicandidate. Fungsi ini mengembalikan `1` jika nilai tersebut terdapat dan `0` jika tidak.
Aturannya adalah sebagai berikut:
Jika
targetdancandidatekeduanya merupakan tipe primitif (NUMBER, BOOLEAN, STRING, atau NULL), target dianggap berisi candidate jika keduanya sama.Jika
targetdancandidatekeduanya merupakan array JSON, target dianggap berisi candidate jika semua elemen `candidate` terdapat dalam elemen mana pun dari `target`.Jika
targetadalah array dancandidatebukan array, target dianggap berisi candidate jika `candidate` terdapat dalam elemen mana pun dari `target`.Jika
targetdancandidatekeduanya 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:
targetdancandidatebertipe JSON.json_pathbertipe JSONPATH.Tipe nilai kembali: BOOLEAN.
Contoh:
Periksa apakah path
$.aberisi 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
$.bberisi 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
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
EXPLAINsebelum 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, dancandidate3.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
vjberisiCP-018673danCP-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
vjberisiCP-018673,1, dan2.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,...])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_alldiatur 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_alldiatur ke'all', fungsi ini mengembalikan `1` jika dokumen JSON berisi semua path yang ditentukan. Jika tidak, fungsi ini mengembalikan `0`.
Tipe nilai input:
jsonbertipe JSON.one_or_allbertipe VARCHAR dan dapat berupa'one'atau'all'(tidak peka huruf besar/kecil).json_pathadalah ekspresi path.Tipe nilai kembali: BOOLEAN.
Contoh:
Periksa apakah dokumen JSON berisi setidaknya salah satu dari path
$.adan$.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
$.adan$.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
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_pathyang ditentukan. Jika kunci dalam dokumenjsonberisi karakter khusus, seperti$atau., formatjson_pathharus 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_pathditentukan, fungsi ini mengembalikan semua kunci dari path yang ditentukan dalam dokumen JSON.Jika
json_pathtidak 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
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
EXPLAINsebelum 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, ataucandidate3.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
vjyang berisiCP-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
vjyang berisi salah satu elemen1,2, atau3.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
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_pathyang ditentukan dari dokumenjsondan mengembalikan string yang telah dimodifikasi. Anda dapat menentukan beberapa elemen untuk dihapus menggunakan `array[json_path,json_path,...]`.Tipe nilai input:
jsonadalah string VARCHAR dalam format JSON.json_pathadalah string VARCHAR dalam format JSON.Tipe nilai kembali: VARCHAR.
Contoh
Hapus elemen pada path
$.glossary.GlossDivdan 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.titledan$.glossary.GlossDiv.titledan 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_pathyang ditentukan.CatatanJika
json_pathtidak menunjuk ke objek atau array JSON, fungsi ini mengembalikan `0`.Tipe nilai input: String atau JSON.
Tipe nilai kembali: BIGINT.
Contoh:
json_pathmenunjuk ke objek JSON. Pernyataannya adalah sebagai berikut:SELECT json_size('{"x":{"a":1, "b": 2}}', '$.x') as result;Hasil berikut dikembalikan:
+--------+ | result | +--------+ | 2 | +--------+json_pathtidak 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
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
jsonpada pathjson_pathyang ditentukan dan mengembalikan dokumenjsonyang telah diperbarui.Jika
jsonataujson_pathbernilai null, fungsi ini mengembalikan null.Jika dokumen
jsontidak dalam format JSON yang valid, atau jikajson_pathmana pun bukan ekspresi path yang valid, pengecualian akan dilemparkan.Jika path
json_pathyang ditentukan ada, nilainya akan ditimpa denganvalue.Jika path
json_pathyang ditentukan tidak ada dalam dokumenjson:Jika
json_pathmenunjuk ke objek JSON,valueditambahkan sebagai elemen baru di lokasi yang ditentukan olehjson_path.Jika
json_pathmenunjuk ke array JSON, fungsi ini memeriksa apakah data sudah ada di posisi sebelumjson_pathyang ditentukan. Jika tidak ada data, nilai `null` ditambahkan untuk mengisi celah sebelumvaluedisisipkan. Jika tidak,valuedisisipkan 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
jsondi manajson_pathbernilai 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
jsondi manajson_pathbukan 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.cSisipkan data ke dokumen
jsondi manajson_path1ada, danjson_path2tidak 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
jsondi manajson_pathyang 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)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 apakahjson_valuesesuai dengan sintaks JSON.Karakter escape yang didukung tercantum dalam tabel berikut.
Sebelum unescape
Setelah unescaping
\"Tanda kutip ganda (
").\bBackspace.
\fForm feed.
\nLine feed.
\rCarriage return.
\tTab.
\\Backslash (
\).\uXXXXRepresentasi 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
statusdalam hasil yang dikembalikan adalahFINISH, 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.