Dokumen ini menjelaskan penggunaan, parameter, dan contoh semua fungsi JSON dalam Lindorm SQL.
Ikhtisar fungsi JSON
Klasifikasi fungsi | Nama fungsi | Deskripsi fungsi |
Fungsi konstruktor JSON | Membuat objek JSON. | |
Membuat array JSON. | ||
Fungsi ekstraksi JSON | Mengekstrak nilai dari dokumen JSON pada path yang ditentukan. | |
Mengekstrak nilai pada path yang ditentukan dan mengonversinya ke string. | ||
Mengekstrak nilai pada path yang ditentukan dan mengonversinya ke bilangan bulat panjang (long integer). | ||
Mengekstrak nilai pada path yang ditentukan dan mengonversinya ke bilangan titik mengambang. | ||
Fungsi pemeriksaan kandungan JSON | Memeriksa apakah dokumen JSON berisi semua nilai atau objek yang ditentukan. | |
Memeriksa apakah dokumen JSON berisi salah satu dari nilai atau objek yang ditentukan. | ||
Fungsi pembaruan JSON | Menyisipkan atau memperbarui data dalam dokumen JSON dan mengembalikan dokumen baru. Ini setara dengan | |
Menyisipkan data ke dalam dokumen JSON dan mengembalikan dokumen baru. Fungsi ini hanya menyisipkan bidang baru jika bidang tersebut belum ada. | ||
Mengganti data yang sudah ada dalam dokumen JSON dan mengembalikan dokumen baru. Fungsi ini hanya memperbarui nilai jika bidang tersebut sudah ada. | ||
Menghapus data dari dokumen JSON pada path yang ditentukan dan mengembalikan dokumen yang telah dimodifikasi. | ||
Semantiknya sama dengan |
Deskripsi fungsi
Fungsi konstruktor JSON
json_object
Membuat objek JSON.
Sintaks:
json_object(key1, value1, key2, value2, ...)
Parameter:
key: Nama kunci. Harus berupa string.value: Nilai. Dapat bertipe apa saja.
Contoh:
-- Membuat objek sederhana
SELECT json_object('name', 'Alice', 'age', 25);
-- Hasil: {"name": "Alice", "age": 25}
-- Digunakan dalam pernyataan INSERT
UPSERT INTO users (id, data) VALUES (1, json_object('name', 'Charlie', 'city', 'Beijing'));json_array
Membuat array JSON.
Sintaks:
json_array(value1, value2, value3, ...)Parameter:
value: Nilai. Dapat berupa skalar, objek, atau array.
Contoh:
-- Membuat array sederhana
SELECT json_array('apple', 'banana', 'orange');
-- Hasil: ["apple", "banana", "orange"]
-- Digunakan dalam pernyataan INSERT
UPSERT INTO products (id, tags) VALUES (1, json_array('electronics', 'mobile', 'smartphone'));
Fungsi ekstraksi JSON
json_extract
Mengekstrak nilai dari dokumen JSON pada path yang ditentukan.
Sintaks:
json_extract(json_column, 'path')Parameter:
json_column: Kolom atau ekspresi bertipe JSON.path: Ekspresi path JSON, seperti$.field,$.array[0], atau$.nested.field.
Contoh:
-- Mengekstrak bidang sederhana
SELECT json_extract('{"name": "Alice", "age": 25}', '$.name');
-- Hasil: "Alice"
-- Mengekstrak bidang bersarang
SELECT json_extract('{"user": {"name": "Bob", "age": 30}}', '$.user.name');
-- Hasil: "Bob"
-- Mengekstrak elemen array
SELECT json_extract('{"skills": ["Java", "Python"]}', '$.skills[0]');
-- Hasil: "Java"
-- Mengekstrak seluruh array
SELECT json_extract('{"skills": ["Java", "Python"]}', '$.skills');
-- Hasil: ["Java", "Python"]
-- Klausul WHERE dengan angka
select * from tb where json_extract(c2, '$.k3.k4') > 5;
-- Klausul WHERE dengan string
select * from tb where json_extract_string(c2, '$.k2') = '1';Fungsi ekstraksi tipe aman: json_extract_type
json_extract_string
Mengekstrak nilai pada path yang ditentukan dan mengonversinya ke string. Jika nilai pada path tersebut bukan string, fungsi ini mengembalikan NULL secara default.
SELECT json_extract_string('{"name": "Alice"}', '$.name');
-- Hasil: Alice (tipe VARCHAR)
SELECT json_extract_string('{"number": "30"}', '$.name');
-- Hasil: NULL. (Tipenya Number, tidak sesuai.)json_extract_long
Mengekstrak nilai pada path yang ditentukan dan mengonversinya ke bilangan bulat panjang (long integer). Jika nilai pada path tersebut bukan angka, Java Database Connectivity (JDBC) melemparkan error.
SELECT json_extract_long('{"id": 123456789}', '$.id');
-- Hasil: 123456789 (tipe LONG)
SELECT json_extract_long('{"id": 123456.789}', '$.id');
-- Melemparkan error
SELECT json_extract_long('{"id": "123456.789"}', '$.id');
-- Melemparkan errorjson_extract_double
Mengekstrak nilai pada path yang ditentukan dan mengonversinya ke bilangan titik mengambang. Jika nilai pada path tersebut bukan bilangan titik mengambang, JDBC melemparkan error.
SELECT json_extract_double('{"id": 12345.56}', '$.id');
-- Hasil: 12345.56 (tipe Double)
SELECT json_extract_double('{"id": 12345}', '$.id');
-- Hasil: 12345.0 (tipe Double)
SELECT json_extract_double('{"id": "123456.789"}', '$.id');
-- Melemparkan errorKetiga fungsi ini bertipe kuat. Elemen pada path yang ditentukan harus benar-benar sesuai dengan tipe fungsi tersebut. Jika tidak, fungsi akan mengembalikan NULL atau melemparkan error. Anda dapat mengonfigurasi kluster untuk memaksa konversi tipe, tetapi hal ini tidak disarankan. Kami menyarankan agar Anda menentukan tipe data sebelum menyisipkan data JSON karena pencampuran tipe dapat menyebabkan masalah logika yang tidak terduga.
Fungsi pemeriksaan kandungan JSON
json_contains
Memeriksa apakah dokumen JSON berisi semua nilai atau objek yang ditentukan.
Sintaks:
json_contains(target, candidate[, path])Parameter:
target_json: Wajib. Dokumen JSON.candidate_json: Wajib. Dokumen JSON yang akan diperiksa.path: Opsional. Ekspresi path.
Untuk informasi lebih lanjut tentang parameter, lihat Informasi parameter tambahan.
Nilai kembalian:
1(true): Nilai yang ditentukan ditemukan.0(false): Target tidak berisi kandidat.
Fungsi json_contains mengembalikan 1 jika dokumen target_json berisi dokumen candidate_json, dan 0 jika tidak. Jika Anda menentukan parameter path, fungsi ini memeriksa apakah data pada path yang ditentukan berisi dokumen candidate_json.
Fungsi json_contains mengembalikan NULL dalam kasus berikut:
Path yang ditentukan tidak ada dalam dokumen JSON.
Salah satu parameter bernilai
NULL.
Contoh:
-- Membuat tabel dan menyisipkan data
CREATE TABLE test_table (id INT, c1 VARCHAR, data JSON, PRIMARY KEY(id));
UPSERT INTO test_table (id, data) VALUES (1, NULL);
UPSERT INTO test_table (id, data) VALUES (2, '{"skills": ["Java", "Python"]}');
UPSERT INTO test_table (id, data) VALUES (3, '{"skills": ["Go", "C"]}');
UPSERT INTO test_table (id, data) VALUES (4, '{"technical_skills": ["Java", "Go", "Rust"]}');
UPSERT INTO test_table (id, data) VALUES (5, '["Java","C++", "JavaScript"]');
UPSERT INTO test_table (id, data) VALUES (6, '{"skills": "Java"}');
UPSERT INTO test_table (id, data) VALUES (7, '["Java", "C#"]');
UPSERT INTO test_table (id, data) VALUES (8, '{"skills": ["Go", "Rust"]}');-- Bentuk dua parameter. Path default adalah '$'.
mysql> SELECT id, data FROM test_table WHERE json_contains(data, '["Java"]') and id>0 and id<10;
+------+------------------------------+
| id | data |
+------+------------------------------+
| 5 | ["Java","C++", "JavaScript"] |
| 7 | ["Java", "C#"] |
+------+------------------------------+
2 baris dalam set (0,01 detik)
-- Bentuk tiga parameter: Periksa path tertentu
mysql> SELECT id, data FROM test_table WHERE json_contains(data, '["Java"]', '$.skills') and id>0 and id<10;
+------+--------------------------------+
| id | data |
+------+--------------------------------+
| 2 | {"skills": ["Java", "Python"]} |
+------+--------------------------------+
1 baris dalam set (0,01 detik)
-- Berisi kedua "Java" dan "Go"
mysql> SELECT id, data FROM test_table WHERE json_contains(data, '["Java","Go"]', '$.skills') and id>0 and id<10;
Set kosong (0,02 detik)
-- Array atau elemen berisi skalar "Java"
mysql> SELECT id, data FROM test_table WHERE json_contains(data, '"Java"', '$.skills') and id>0 and id<10;
+------+--------------------------------+
| id | data |
+------+--------------------------------+
| 2 | {"skills": ["Java", "Python"]} |
| 6 | {"skills": "Java"} |
+------+--------------------------------+
2 baris dalam set (0,01 detik)
-- Elemen array berisi array yang hanya memiliki skalar "Java". (Untuk id=6, dokumen JSON pada path tersebut adalah skalar. Subset dari skalar hanya bisa berupa skalar, bukan array.)
mysql> SELECT id, data FROM test_table WHERE json_contains(data, '["Java"]', '$.skills') and id>0 and id<10;
+------+--------------------------------+
| id | data |
+------+--------------------------------+
| 2 | {"skills": ["Java", "Python"]} |
+------+--------------------------------+
1 baris dalam set (0,01 detik)
-- Periksa apakah seluruh dokumen berisi objek
SELECT json_contains('{"a": 1, "b": 2}', '{"a": 1}');
-- Hasil: 1
-- Periksa apakah path tertentu berisi nilai
SELECT json_contains('{"a": 1, "b": 2}', '1', '$.a');
-- Hasil: 1
SELECT json_contains('{"a": 1, "b": 2}', '1', '$.b');
-- Hasil: 0
-- Periksa kandungan dalam array
SELECT json_contains('{"skills": ["Java", "Python"]}', '"Java"', '$.skills');
-- Hasil: 1Informasi parameter tambahan
candidate_jsonadalah dokumen JSON. Anda harus merepresentasikan elemen yang sesuai sebagai string JSON.Dokumen JSON yang berisi angka 10:
'10'Dokumen JSON yang berisi string "10":
'"10"'Dokumen JSON yang berisi daftar angka:
'[1,2,3]'Dokumen JSON yang berisi daftar string:
'["10","abc","key"]'
Subset dari skalar hanya bisa berupa skalar. Subset dari array bisa berupa elemen atau array.
Klasifikasi tipe JSON:
Skalar: String, Angka (Integer/Double), Boolean, Null
Tipe kompleks: Array, Objek
Pertimbangkan kondisi pemeriksaan
json_contains_any(skills, '["Java"]', '$.technical_skills'). Untuk JSON pada path$.technical_skills:Jika nilainya
{"technical_skills":"Java"}, fungsi mengembalikanfalse. Subset dari string tidak bisa berupa daftar.Jika nilainya
{"technical_skills":["Java"]}atau{"technical_skills":["Java","Go"]}, fungsi mengembalikantrue.
Pertimbangkan kondisi pemeriksaan
json_contains_any(skills, '"Java"', '$.technical_skills'). Untuk JSON pada path$.technical_skills:Jika nilainya
{"technical_skills":"Java"}, fungsi mengembalikantrue.Jika nilainya
{"technical_skills":["Java"]}atau{"technical_skills":["Java","Go"]}, fungsi mengembalikantrue.
json_contains_any
Memeriksa apakah dokumen JSON berisi salah satu dari nilai atau objek yang ditentukan.
Sintaks:
Sintaksnya sama dengan json_contains. Untuk informasi lebih lanjut tentang perbedaannya, lihat Perbandingan fungsi pemeriksaan kandungan JSON.
Contoh:
mysql> select json_contains_any('{"skills": ["Java", "Python"]}', '["Java", "Go"]');
+--------+
| EXPR$0 |
+--------+
| 0 |
+--------+
1 baris dalam set (0,02 detik)
mysql> select json_contains_any('{"skills": ["Java", "Python"]}', '["Java", "Go"]','$.skills');
+--------+
| EXPR$0 |
+--------+
| 1 |
+--------+
1 baris dalam set (0,03 detik)
-- Bentuk default dua parameter. Path default adalah '$'.
mysql> SELECT id, data FROM test_table WHERE json_contains_any(data, '["Java", "Go"]') limit 10;
+------+------------------------------+
| id | data |
+------+------------------------------+
| 5 | ["Java","C++", "JavaScript"] |
| 7 | ["Java", "C#"] |
+------+------------------------------+
2 baris dalam set (0,01 detik)
-- Bentuk tiga parameter
mysql> SELECT id, data FROM test_table WHERE json_contains_any(data, '["Java", "Go", "Rust"]', '$.skills') limit 10;
+------+--------------------------------+
| id | data |
+------+--------------------------------+
| 2 | {"skills": ["Java", "Python"]} |
| 3 | {"skills": ["Go", "C"]} |
| 6 | {"skills": "Java"} |
| 8 | {"skills": ["Go", "Rust"]} |
+------+--------------------------------+
4 baris dalam set (0,01 detik)
-- Periksa apakah berisi salah satu nilai dari array
SELECT json_contains_any('{"skills": ["Java", "Python"]}', '["Java", "Go"]');
-- Hasil: 0
SELECT json_contains_any('{"skills": ["Java", "Python"]}', '["Java", "Go"]','$.skills');
-- Hasil: 1
-- Periksa pada path tertentu
SELECT json_contains_any('{"departments": ["Engineering", "Sales"]}', '["Marketing", "Engineering"]', '$.departments');
-- Hasil: 1Fungsi pembaruan JSON
json_set
Menyisipkan atau memperbarui data dalam dokumen JSON dan mengembalikan dokumen yang telah dimodifikasi. Fungsi ini setara dengan json_insert + json_replace.
Sintaks:
json_set(json_column, 'path', new_value)Perilaku:
Jika path yang ditentukan ada, fungsi ini memperbarui nilai pada path tersebut.
Jika path yang ditentukan tidak ada, fungsi ini menyisipkan nilai pada path tersebut.
Jika kolom JSON bernilai NULL, hasilnya juga NULL. Tidak ada aksi yang dilakukan.
Contoh:
-- Memperbarui bidang yang sudah ada
UPSERT INTO test_table (id, data) VALUES (3, '{"name": "Charlie", "age": 30}');
UPDATE test_table SET data = json_set(data, '$.age', 31) WHERE id = 3;
-- Hasil: {"name": "Charlie", "age": 31}
-- Menyisipkan bidang baru
UPDATE test_table SET data = json_set(data, '$.department', 'Engineering') WHERE id = 3;
-- Hasil: {"name": "Charlie", "age": 31, "department": "Engineering"}
-- Saat kolom JSON bernilai NULL (perbedaan utama dari json_upsert)
UPSERT INTO test_table (id,c1) VALUES (4,'test');
UPDATE test_table SET data = json_set(data, '$.name', 'David') WHERE id = 4;
-- Hasil: NULLjson_insert
Menyisipkan data ke dalam dokumen JSON dan mengembalikan dokumen yang telah dimodifikasi. Fungsi ini hanya menyisipkan nilai baru jika nilai tersebut belum ada pada path yang ditentukan.
Sintaks:
json_insert(json_column, 'path', new_value)Perilaku:
Jika path yang ditentukan tidak ada, fungsi ini menyisipkan nilai pada path tersebut.
Jika path yang ditentukan sudah ada, fungsi ini tidak melakukan apa pun.
Contoh:
-- Menyisipkan bidang baru
UPSERT INTO test_table (id, data) VALUES (5, '{"name": "Eve"}');
UPDATE test_table SET data = json_insert(data, '$.age', 28) WHERE id = 5;
-- Hasil: {"name": "Eve", "age": 28}
-- Mencoba menyisipkan bidang yang sudah ada (tidak berpengaruh)
UPDATE test_table SET data = json_insert(data, '$.name', 'New Name') WHERE id = 5;
-- Hasil: {"name": "Eve", "age": 28} (Bidang name tetap tidak berubah)json_replace
Mengganti data yang sudah ada dalam dokumen JSON dan mengembalikan dokumen yang telah dimodifikasi. Fungsi ini hanya memperbarui nilai jika nilai tersebut sudah ada pada path yang ditentukan.
Sintaks:
json_replace(json_column, 'path', new_value)Perilaku:
Jika path yang ditentukan ada, fungsi ini memperbarui nilai pada path tersebut.
Jika path yang ditentukan tidak ada, fungsi ini tidak melakukan apa pun.
Contoh:
-- Memperbarui bidang yang sudah ada
UPSERT INTO test_table (id, data) VALUES (6, '{"name": "Frank", "age": 35}');
UPDATE test_table SET data = json_replace(data, '$.age', 36) WHERE id = 6;
-- Hasil: {"name": "Frank", "age": 36}
-- Mencoba memperbarui bidang yang tidak ada (tidak berpengaruh)
UPDATE test_table SET data = json_replace(data, '$.city', 'Shanghai') WHERE id = 6;
-- Hasil: {"name": "Frank", "age": 36} (Tidak ada bidang city)json_remove
Menghapus data dari dokumen JSON pada path yang ditentukan dan mengembalikan dokumen yang telah dimodifikasi.
Sintaks:
json_remove(json_column, 'path')Perilaku:
Jika path yang ditentukan ada, fungsi ini menghapus data pada path tersebut.
Jika path yang ditentukan tidak ada, operasi ini aman dan tidak terjadi error.
Contoh:
-- Menghapus bidang
UPSERT INTO test_table (id, data) VALUES (7, '{"name": "Grace", "temp_field": "to_remove"}');
UPDATE test_table SET data = json_remove(data, '$.temp_field') WHERE id = 7;
-- Hasil: {"name": "Grace"}
-- Menghapus bidang yang tidak ada (aman)
UPDATE test_table SET data = json_remove(data, '$.nonexistent') WHERE id = 7;
-- Hasil: {"name": "Grace"} (Tidak ada error)json_upsert
Fungsi ini semantiknya sama dengan json_set, tetapi dapat menangani nilai NULL.
Sintaks:
json_upsert(json_column, 'path', new_value)
Perilaku:
Jika kolom JSON bernilai NULL, fungsi ini membuat objek baru:
{path: new_value}Jika path yang ditentukan ada, fungsi ini memperbarui nilai pada path tersebut.
Jika path yang ditentukan tidak ada, fungsi ini menyisipkan nilai pada path tersebut.
Contoh:
-- Saat kolom JSON bernilai NULL
CREATE TABLE test_table (id INT, c1 VARCHAR, data JSON, PRIMARY KEY(id));
UPSERT INTO test_table (id,c1) VALUES (1,'test');
UPDATE test_table SET data = json_upsert(data, '$.name', 'Alice') WHERE id = 1;
-- Hasil: {"name": "Alice"}
-- Memperbarui bidang yang sudah ada
UPSERT INTO test_table (id, data) VALUES (2, '{"name": "Bob", "age": 25}');
UPDATE test_table SET data = json_upsert(data, '$.age', 26) WHERE id = 2;
-- Hasil: {"name": "Bob", "age": 26}
-- Menyisipkan bidang baru
UPDATE test_table SET data = json_upsert(data, '$.city', 'Beijing') WHERE id = 2;
-- Hasil: {"name": "Bob", "age": 26, "city": "Beijing"}Untuk informasi lebih lanjut tentang perbedaan antara fungsi pembaruan JSON ini, lihat Perbandingan fungsi pembaruan JSON.
Rangkuman perbandingan fungsi
Perbandingan fungsi pemeriksaan kandungan JSON
Fungsi | Perbedaan |
| Untuk Dengan kata lain, |
| Untuk Dengan kata lain, |
Perbandingan fungsi pembaruan JSON
Fungsi | Penanganan kolom NULL | Bidang sudah ada | Bidang tidak ada | Kasus penggunaan utama |
| Tetap NULL | Perbarui | Sisipkan | Memperbarui kolom yang diketahui tidak NULL. (Sesuai dengan semantik MySQL). |
| Membuat objek baru | Perbarui | Sisipkan | Pembaruan tujuan umum. Menyisipkan bahkan jika kolom bernilai NULL. |
| Tetap NULL | Tidak ada operasi | Sisipkan | Hanya menyisipkan bidang baru. |
| Tetap NULL | Perbarui | Tidak ada operasi | Hanya memperbarui bidang yang sudah ada. |
| Tetap NULL | Hapus | Tidak ada operasi | Menghapus bidang. |
Dukungan indeks berbasis fungsi
Sintaks
create_index_statement ::= CREATE INDEX [ index_name ]
ON table_name '(' index_identifier ')'
[INCLUDE include_identifier]
[ASYNC]
[ index_options ]
index_identifier ::= '('json_extract_type(column, json_path)')'
include_identifier ::= '('column_name1,...,column_namen ')'Deskripsi parameter
Parameter | Deskripsi |
index_name | Nama tabel indeks. |
table_name | Nama tabel lebar. |
json_extract_type | Mengekstrak bidang dengan tipe data tertentu dari kolom JSON untuk digunakan sebagai indeks sekunder. Jika tipe data tidak sesuai, indeks sekunder tidak dibuat. Jenis fungsi berikut didukung:
|
column | Nama kolom JSON. |
json_path | Path dalam kolom JSON. Digunakan untuk mengekstrak nilai pada path yang ditentukan. |
ASYNC | Membangun indeks secara asinkron. Jika Anda tidak menambahkan ASYNC, indeks dibangun secara sinkron. |
Untuk informasi lebih lanjut tentang dukungan indeks pencarian untuk fungsi JSON, lihat Menggunakan indeks pencarian untuk tipe JSON Lindorm.
Fungsi yang didukung
Fungsi JSON berikut mendukung pembuatan indeks berbasis fungsi:
Mempercepat kueri terkait json_extract dan json_extract_type
json_extract_string(json_column, 'path')json_extract_long(json_column, 'path')json_extract_double(json_column, 'path')
Lindorm wide table SQL memungkinkan Anda membuat indeks sekunder untuk data pada path tertentu dalam kolom bertipe JSON. Namun, saat membuat indeks sekunder, Anda harus menentukan tipe fungsi json_extract untuk kolom JSON tersebut.
Mempercepat kueri terkait json_contains
json_contains(json_column, 'value', 'path')
Saat ini, parameter value dan path harus berupa nilai tetap. Kondisi kueri harus statis.
Contoh pembuatan indeks
-- Membuat indeks untuk json_contains
CREATE INDEX idx_user_role ON test_table (json_contains(data, '"admin"', '$.roles')) INCLUDE(data) SYNC;
-- Membuat indeks untuk json_extract_string
CREATE INDEX idx_user_city ON test_table (json_extract_string(data, '$.address.city')) INCLUDE(data) SYNC;
-- Membuat indeks untuk json_extract_string tanpa menyertakan kolom
CREATE INDEX idx_user_city ON test_table (json_extract_string(data, '$.address.city'));
-- Membuat indeks untuk json_extract_long
CREATE INDEX idx_user_age ON test_table (json_extract_long(data, '$.age')) INCLUDE(data) SYNC;
-- Melihat hasil pembuatan indeks
SHOW INDEX FROM test_table;Batasan
Selalu ikuti sintaks standar saat menggunakan JsonPath.
Perhatikan dampak performa dari operasi JSON yang kompleks.
Untuk path yang sering dikueri, Anda dapat membuat indeks untuk meningkatkan kecepatan respons kueri.
Penanganan error umum
Path JSON tidak valid
Error
illegal json pathterjadi jikaJsonPathbukanJsonPathyang valid. Untuk informasi lebih lanjut, lihat definisiJsonPathmenurut MySQL.Nilai JSON tidak valid
json_contain candidate is not a valid value: Periksa bahwa parametercandidateadalah string JSON yang valid.Peringatan pemindaian tabel penuh
This query may be a full table scan and thus may have unpredictable performance: Peringatan ini menunjukkan adanya pemindaian tabel penuh yang tidak efisien. Anda dapat membuat indeks untuk mempercepat kueri atau menambahkan klausa `LIMIT` untuk memfilter subset data.
Rekomendasi
Pilih fungsi pembaruan yang tepat
Anda dapat memilih
json_upsertataujson_setberdasarkan kebutuhan bisnis Anda.Perencanaan indeks
Anda dapat membuat indeks berbasis fungsi untuk path JSON yang sering dikueri.
Keamanan tipe
Gunakan fungsi ekstraksi spesifik tipe untuk memastikan kebenaran tipe data. Hindari mencampur angka dan string numerik, karena dapat menyebabkan ambiguitas. Misalnya, hindari mencampur angka 10 dan string "10".