Topik ini menjelaskan fungsi JSON yang didukung oleh kluster AnalyticDB for MySQL.
JSON_ARRAY_CONTAINS: memeriksa apakah array JSON berisi nilai yang ditentukan oleh parameter
value.JSON_ARRAY_LENGTH: mengembalikan panjang array JSON.
JSON_CONTAINS (Versi 3.1.5.0 atau lebih baru): memeriksa apakah jalur yang ditentukan berisi nilai dari
candidate. Jika jalur tidak ditentukan, fungsi ini memeriksa apakah target berisi nilai yang ditentukan olehcandidate.JSON_CONTAINS_PATH (Versi 3.1.5.0 atau lebih baru): memeriksa apakah dokumen JSON berisi satu atau semua jalur yang ditentukan.
JSON_EXTRACT: mengembalikan nilai yang ditentukan oleh parameter
json_pathdari dokumen JSON.JSON_KEYS: mengembalikan semua kunci objek JSON pada jalur yang ditentukan oleh
json_path. Jikajson_pathtidak ditentukan, fungsi ini mengembalikan semua kunci di jalur root (json_path='$').JSON_OVERLAPS (Versi 3.1.10.6 atau lebih baru): memeriksa apakah dokumen JSON berisi salah satu elemen kandidat yang ditentukan, seperti
candidate1,candidate2, ataucandidate3.JSON_REMOVE (Versi 3.1.10.0 atau lebih baru): menghapus elemen yang ditentukan oleh
json_pathdari dokumenjsondan mengembalikan string baru. Anda dapat menentukan beberapa jalur dalam sebuah array untuk menghapus beberapa elemen.JSON_SIZE: mengembalikan ukuran objek atau array JSON yang ditentukan oleh parameter
json_path.JSON_SET (Versi 3.2.2.8 dan lebih baru): menyisipkan atau memperbarui data dalam dokumen
jsonpadajson_pathyang ditentukan dan mengembalikan dokumenjsonyang diperbarui.JSON_UNQUOTE (Versi 3.1.5.0 atau lebih baru): menghapus tanda kutip ganda dari
json_value, menghilangkan karakter escape tertentu dalamjson_value, dan mengembalikan hasilnya.
JSON_ARRAY_CONTAINS
json_array_contains(json, value)Deskripsi: Memeriksa apakah array JSON berisi
nilaiyang ditentukan.Tipe nilai masukan: Parameter
valuedapat berupa tipe numerik, string, atau BOOLEAN.Tipe nilai kembali: BOOLEAN.
Contoh:
Memeriksa apakah array JSON
[1, 2, 3]berisi elemen dengan nilai 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 masukan: STRING atau JSON.
Tipe nilai kembali: BIGINT.
Contoh:
Mengembalikan 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 berisi konten tertentu. Anda dapat menggunakan indeks array JSON dalam kueri untuk menghindari pemindaian tabel penuh atau penguraian seluruh dokumen JSON, sehingga meningkatkan kinerja kueri.
Tanpa indeks JSON
Sintaks ini hanya didukung oleh kluster AnalyticDB for MySQL versi 3.1.5.0 atau lebih baru.
Untuk melihat dan memperbarui versi minor kluster AnalyticDB for MySQL, masuk ke Konsol AnalyticDB for MySQL dan buka bagian Configuration Information pada halaman Cluster Information.
json_contains(target, candidate[, json_path])Deskripsi:
Jika
json_pathditentukan, fungsi ini memeriksa apakah jalur tersebut berisi nilaicandidate. Fungsi ini mengembalikan 1 untuk true dan 0 untuk false.Jika
json_pathtidak ditentukan, fungsi ini memeriksa apakah dokumen target berisi nilaicandidate. Fungsi ini mengembalikan 1 untuk true dan 0 untuk false.
Aturan berikut berlaku:
Jika
targetdancandidatekeduanya merupakan tipe primitif, seperti NUMBER, BOOLEAN, STRING, atau NULL, `target` berisi `candidate` jika keduanya sama.Jika
targetdancandidatekeduanya merupakan array JSON, `target` berisi `candidate` jika setiap elemen dalam `candidate` juga merupakan elemen dari `target`.Jika
targetadalah array dancandidatebukan, `target` berisi `candidate` jika `candidate` merupakan elemen dari `target`.Jika
targetdancandidatekeduanya merupakan objek JSON, `target` berisi `candidate` jika setiap kunci dalam `candidate` juga ada di `target`, dan nilai untuk setiap kunci dalam `candidate` terdapat dalam nilai yang sesuai di `target`.
Tipe nilai masukan: Parameter
targetdancandidatebertipe JSON. Parameterjson_pathbertipe JSONPATH.Tipe nilai kembali: BOOLEAN.
Contoh:
Memeriksa apakah jalur
$.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 | +--------+Memeriksa apakah jalur
$.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 | +--------+Memeriksa 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 oleh kluster AnalyticDB for MySQL versi 3.1.10.6 atau lebih baru.
Buat indeks array JSON untuk kolom JSON yang ditentukan. Untuk informasi selengkapnya, lihat Buat indeks array JSON.
Anda dapat menambahkan
EXPLAINsebelum pernyataan SQL untuk melihat rencana eksekusinya. Jika rencana eksekusi tidak mencakup operator ScanFilterProject, indeks array JSON berhasil digunakan untuk kueri tersebut. Jika tidak, indeks array JSON tidak digunakan.
json_contains(json_path, cast('[candidate1,candidate2,candidate3]' as json)) Deskripsi: Memeriksa apakah dokumen JSON berisi semua elemen yang ditentukan, seperti
candidate1,candidate2, dancandidate3.Tipe nilai masukan: Nilai untuk
candidate1, candidate2, candidate3, ...dapat berupa numerik atau string, dan semuanya harus memiliki tipe data yang sama.Tipe nilai kembali: VARCHAR.
Contoh:
Memeriksa 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 | +------------------------------------------------------------+Memeriksa 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 oleh kluster AnalyticDB for MySQL versi 3.1.5.0 atau lebih baru.
Untuk melihat dan memperbarui versi minor kluster AnalyticDB for MySQL, masuk ke Konsol AnalyticDB for MySQL dan buka bagian Configuration Information pada halaman Cluster Information.
Deskripsi: Memeriksa apakah dokumen JSON berisi nilai pada jalur yang ditentukan.
Jika
one_or_alldiatur ke'one', fungsi ini mengembalikan 1 jika dokumen JSON berisi setidaknya satu dari jalur yang ditentukan. Jika tidak, fungsi ini mengembalikan 0.Jika
one_or_alldiatur ke'all', fungsi ini mengembalikan 1 jika dokumen JSON berisi semua jalur yang ditentukan. Jika tidak, fungsi ini mengembalikan 0.
Tipe nilai masukan: Parameter
jsonbertipe JSON. Parameterone_or_allbertipe VARCHAR. Nilai yang valid adalah'one'atau'all', yang tidak peka huruf besar/kecil. Parameterjson_pathadalah jalur.Tipe nilai kembali: BOOLEAN.
Contoh:
Memeriksa apakah dokumen JSON berisi setidaknya satu dari jalur
$.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 | +--------+Memeriksa apakah dokumen JSON berisi kedua jalur
$.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 tidak mendukung
ORDER BY, yang mirip dengan kolom bertipe JSON.Ketika Anda 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 sebelum menggunakannya sebagai parameter masukan untuk fungsi JSON_UNQUOTE.
json_extract(json, json_path)Deskripsi: Mengembalikan nilai yang ditentukan oleh
json_pathdari dokumen JSON. Jika kunci dalamjsonberisi karakter khusus, seperti$atau., formatjson_pathharus berupa'$["Key"]'.Misalnya, jika kuncinya adalah
$data, tentukan `json_path` sebagai'$["$data"]'.Tipe nilai masukan: STRING atau JSON.
Tipe nilai kembali: JSON.
Contoh:
Mengembalikan nilai pada jalur `$[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 | +-------------------------------------------+Mengembalikan nilai dari jalur `$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 objek JSON pada jalur tersebut.Jika
json_pathtidak ditentukan, fungsi ini mengembalikan semua kunci dari objek root, yang setara denganjson_path='$'.
Tipe nilai masukan: Hanya parameter bertipe JSON yang didukung.
Anda dapat membuat data JSON dengan cara berikut:
Gunakan data JSON secara langsung. Contoh:
json '{"a": 1, "b": {"c": 30}}'.Gunakan fungsi CAST untuk secara eksplisit mengonversi string menjadi data JSON. Contoh:
CAST('{"a": 1, "b": {"c": 30}}' AS json).
Tipe nilai kembali: Array JSON.
Contoh:
Mengembalikan semua kunci pada jalur
$.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"] | +-----------------------------------------------------------+Mengembalikan semua kunci pada jalur 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 oleh kluster AnalyticDB for MySQL versi 3.1.10.6 atau lebih baru.
Buat indeks array JSON untuk kolom JSON yang ditentukan. Untuk informasi selengkapnya, lihat Buat indeks array JSON.
Anda dapat menambahkan
EXPLAINsebelum pernyataan SQL untuk melihat rencana eksekusinya. Jika rencana eksekusi tidak mencakup operator ScanFilterProject, indeks array JSON berhasil digunakan untuk kueri tersebut. Jika tidak, indeks array JSON tidak digunakan.
json_overlaps(json, cast('[candidate1,candidate2,candidate]' as json)) Deskripsi: Memeriksa apakah dokumen JSON berisi salah satu elemen yang ditentukan, seperti
candidate1,candidate2, dancandidate3.Tipe nilai masukan: Parameter
candidate1, candidate2, candidate3, ...menerima nilai numerik atau string. Semua nilai harus memiliki tipe data yang sama.Tipe nilai kembali: VARCHAR.
Contoh:
Mengembalikan data yang berisi
CP-018673dari kolom JSON yang ditentukanvj.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"] | +-----+----------------------------------------------------------------------------+Mengembalikan data yang berisi salah satu elemen
1,2, atau3dari kolom JSON yang ditentukanvj.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 oleh kluster AnalyticDB for MySQL versi 3.1.10.0 atau lebih baru.
Untuk melihat dan memperbarui versi minor kluster AnalyticDB for MySQL, masuk ke Konsol AnalyticDB for MySQL dan buka bagian Configuration Information pada halaman Cluster Information.
json_remove(json,json_path)
json_remove(json,array[json_path,json_path,...])Deskripsi: Menghapus satu atau beberapa elemen yang ditentukan oleh
json_pathdari dokumenjsondan mengembalikan string baru. Anda dapat menentukan beberapa jalur dalam sebuah array, seperti `array[json_path, json_path, ...]` untuk menghapus beberapa elemen.Tipe nilai masukan: Parameter
jsonadalah string VARCHAR dalam format JSON. Parameterjson_pathadalah string VARCHAR dalam format JSON.Tipe nilai kembali: VARCHAR.
Contoh
Menghapus bagian pada jalur
$.glossary.GlossDivdan mengembalikan string yang 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"}}Menghapus bagian pada jalur
$.glossary.titledan$.glossary.GlossDiv.titledan mengembalikan string yang 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 JSON atau array JSON yang ditentukan oleh
json_path.CatatanFungsi ini mengembalikan 0 jika
json_pathtidak menunjuk ke objek JSON atau array JSON.Tipe nilai masukan: 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 JSON 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 oleh kluster AnalyticDB for MySQL versi 3.2.2.8 atau lebih baru.
Untuk melihat dan memperbarui versi minor kluster AnalyticDB for MySQL, masuk ke Konsol AnalyticDB for MySQL dan buka bagian Configuration Information pada halaman Cluster Information.
json_set(json, json_path, value[, json_path, value] ...)Deskripsi: Menyisipkan atau memperbarui data dalam dokumen
jsonpadajson_pathyang ditentukan dan mengembalikan dokumenjsonyang diperbarui.Jika parameter
jsonataujson_pathbernilai null, fungsi ini mengembalikan null.Pengecualian dilemparkan jika
jsonbukan dokumen JSON yang valid, atau jikajson_pathmana pun bukan ekspresi jalur yang valid.Jika
json_pathyang ditentukan ada, nilainya ditimpa olehvaluebaru.Jika
json_pathyang ditentukan tidak ada dalamjson:Jika
json_pathmenunjuk ke objek JSON,valueditambahkan sebagai elemen baru ke lokasi yang ditentukan olehjson_path.Jika
json_pathmenunjuk ke array JSON, fungsi ini memeriksa apakah ada slot kosong sebelum posisi yang ditentukan olehjson_path. Jika ada slot kosong, slot tersebut diisi dengan nilai `null` sebelumvaluedisisipkan. Jika tidak,valuedisisipkan secara langsung.Pengecualian dilemparkan dalam kasus lainnya.
Tipe nilai masukan:
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:
Menyisipkan 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 | +------------------------------------------------+Menyisipkan data ke dokumen
jsondi manajson_pathbukan ekspresi jalur yang valid.SELECT JSON_SET('{ "a": 1, "b": [2, 3]}', '$.b.c', '10');Hasil:
Failed to execute json_set() for json_path: $.b.cMenyisipkan data ke dokumen
json. Jalurjson_path1ada, tetapijson_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]"} | +-----------------------------------------------------------------------+Menyisipkan data ke dokumen
json.json_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 oleh kluster AnalyticDB for MySQL versi 3.1.5.0 atau lebih baru.
Untuk melihat dan memperbarui versi minor kluster AnalyticDB for MySQL, masuk ke Konsol AnalyticDB for MySQL dan buka bagian Configuration Information pada halaman Cluster Information.
Deskripsi: Menghilangkan tanda kutip dari
json_valuedengan menghapus tanda kutip ganda luar dan menghilangkan karakter escape tertentu di dalam nilai tersebut, lalu mengembalikan hasilnya.AnalyticDB for MySQL tidak memvalidasi parameter
json_value. Parameterjson_valuediproses berdasarkan logika di atas, terlepas dari apakah parameter tersebut sesuai dengan sintaks JSON atau tidak.Tabel berikut menjelaskan karakter escape yang didukung.
Sebelum escaping
Setelah escaping
\"Tanda kutip ganda (
").\bBackspace.
\fForm feed.
\nLine feed.
\rCarriage return.
\tTab.
\\Backslash (
\).\uXXXXRepresentasi karakter UTF-8.
Tipe nilai masukan: VARCHAR.
Tipe nilai kembali: VARCHAR.
Contoh:
Mengembalikan string tanpa tanda kutip
abc. Pernyataannya adalah sebagai berikut:SELECT json_unquote('"abc"');Hasil berikut dikembalikan:
+-----------------------+ | json_unquote('"abc"') | +-----------------------+ | abc | +-----------------------+Mengembalikan string yang tidak dikutip dan diurai. Pernyataannya adalah sebagai berikut:
SELECT json_unquote('"\\t\\u0032"');Hasil berikut dikembalikan:
+------------------------------+ | json_unquote('"\\t\\u0032"') | +------------------------------+ | 2 | +------------------------------+
Lampiran: Sintaks Jalur JSON
Penggunaan
Gunakan
$.keyName[.keyName]...untuk mengakses kunci tertentu dalam objek JSON.Gunakan
$[nonNegativeInteger]untuk mengakses elemen ke-n dari array JSON, di mana n adalah bilangan bulat non-negatif.Gunakan
$.keyName[.keyName]...[nonNegativeInteger]untuk mengakses elemen ke-n dari array JSON bersarang dalam objek JSON, di mana n adalah bilangan bulat non-negatif.
Catatan
Sintaks Jalur JSON di AnalyticDB for MySQL tidak mendukung karakter wildcard * dan **. Misalnya, ekspresi '$.*', '$.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 |
Mengakses nilai kunci name | $.name | name |
Mengakses nilai kunci city dalam objek bersarang | $.address.city | $.address[0] |
Mengakses 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 karena operasi BUILD belum dilakukan setelah Anda membuat indeks JSON menggunakan pernyataan ALTER, atau operasi BUILD belum selesai. Dalam kasus ini, indeks JSON belum berlaku.
Solusi:
Jika tugas BUILD belum dilakukan:
Kluster AnalyticDB for MySQL secara otomatis memicu tugas BUILD setelah kondisi tertentu terpenuhi. Anda juga dapat secara manual memicu tugas BUILD.
Jika tugas BUILD telah dilakukan:
Jalankan pernyataan berikut untuk menanyakan status tugas BUILD. Jika nilai bidang
statusadalahFINISH, 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: pelajari tentang tipe JSON.
Indeks JSON: pelajari cara membuat indeks untuk objek JSON atau array JSON.