Di MySQL, JSON_VALUE()
fungsi mengekstrak nilai dari dokumen JSON di jalur yang ditentukan.
Fungsi ini diperkenalkan di MySQL 8.0.21.
Sintaks
Sintaksnya seperti ini:
JSON_VALUE(json_doc, path [RETURNING type] [on_empty] [on_error])
Dimana:
on_empty:
{NULL | ERROR | DEFAULT value} ON EMPTY
on_error:
{NULL | ERROR | DEFAULT value} ON ERROR
Contoh
Berikut adalah contoh sederhana untuk ditunjukkan:
SELECT JSON_VALUE( '{ "name" : "Wag", "type" : "Dog" }', '$.type' );
Hasil:
Dog
Array
Berikut ini contoh mendapatkan nilai dari array:
SELECT JSON_VALUE( '{ "name" : "Wag", "scores" : [ 25, 36, 48 ] }', '$.scores[1]' );
Hasil:
36
Array berbasis nol, jadi 1
mengembalikan elemen kedua (0
akan mengembalikan yang pertama).
Dokumen Tersemat
Berikut ini contoh mendapatkan nilai dari objek yang disematkan:
SELECT JSON_VALUE(
'{
"_id" : 1,
"details" : {
"name" : "Wag",
"type" : "Dog"
}
}',
'$.details.type'
);
Hasil:
Dog
Jenis Pengembalian
Berikut ini contoh menentukan jenis pengembalian:
SELECT JSON_VALUE(
'{
"_id" : 1,
"details" : {
"name" : "Wag",
"type" : "Dog"
}
}',
'$.details' RETURNING json
);
Hasil:
{"name": "Wag", "type": "Dog"}
Jika Anda tidak menentukan jenis pengembalian, jenis pengembaliannya adalah VARCHAR(512)
.
Hasil Kosong
Secara default, jika tidak ada data yang ditemukan pada jalur yang ditentukan, NULL
dikembalikan:
SELECT JSON_VALUE(
'{
"name" : "Wag",
"type" : "Dog"
}',
'$.score'
);
Hasil:
NULL
Namun, opsi berikut dapat digunakan untuk secara eksplisit menentukan apa yang harus terjadi ketika tidak ada data yang ditemukan di jalur yang diberikan:
NULL ON EMPTY
:Fungsi mengembalikanNULL
; ini adalah perilaku default.DEFAULT
:value
DI KOSONGvalue
. yang diberikan dikembalikan. Jenis nilai harus cocok dengan jenis yang dikembalikan.ERROR ON EMPTY
:Fungsi memunculkan kesalahan.
Contoh:
SELECT JSON_VALUE(
'{
"name" : "Wag",
"type" : "Dog"
}',
'$.score'
DEFAULT 'Nothing found' ON EMPTY
);
Hasil:
Nothing found
Kesalahan
Berikut ini dapat digunakan untuk menentukan apa yang terjadi ketika kesalahan terjadi:
NULL ON ERROR
:JSON_VALUE()
mengembalikanNULL
; ini adalah perilaku default.DEFAULT
:Ini adalah nilai yang dikembalikan; nilainya harus cocok dengan jenis pengembalian.value
DI KESALAHANERROR ON ERROR
:Terjadi kesalahan.
Jika digunakan, ON EMPTY
harus mendahului ON ERROR
ayat. Menentukannya dalam urutan yang salah akan menyebabkan kesalahan sintaksis.
Indeks
Seperti disebutkan dalam catatan rilis MySQL 8.0.21, JSON_VALUE()
fungsi menyederhanakan pembuatan indeks pada JSON
kolom. Panggilan ke JSON_VALUE(
sama dengan memanggil json_doc
, path
MENGEMBALIKAN type
)CAST( JSON_UNQUOTE( JSON_EXTRACT(
.json_doc
, path
) ) SEBAGAI type
)
Berikut adalah contoh yang digunakan dalam catatan rilis:
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)) )
);