MySQL5. 7. 8+ mendukung tipe JSON asli. Meskipun Anda memiliki cara yang berbeda untuk membuat objek json, Anda juga dapat mengakses dan membaca anggota dengan cara yang berbeda Show
Fungsi utama adalah Baca nilai Array JSONBuat variabel @myjson sebagai tipe JSON ()
Ekstrak Jadi Seperti halnya ->, operator ->> selalu diperluas dalam output EXPLAIN, seperti yang ditunjukkan contoh berikut Membaca tentang Sintaksis
ParameterParameterDescriptionjson_docvalid JSON documentpathmembers pathDisebutkan dalam
Jika ada kemungkinan bahwa argumen tersebut dapat mengembalikan beberapa nilai, nilai yang cocok akan dibungkus secara otomatis sebagai larik, dalam urutan yang sesuai dengan jalur yang menghasilkannya. Jika tidak, nilai yang dikembalikan adalah nilai tunggal yang cocok Di MySQL, fungsi SELECT JSON_EXTRACT('{"a": 1, "b": 2, "c": 3}', '$.b') AS 'Result';_7 menampilkan data dari dokumen JSON. Data aktual yang dikembalikan ditentukan oleh jalur yang Anda berikan sebagai argumen Anda memberikan dokumen JSON sebagai argumen pertama, diikuti dengan jalur data yang akan dikembalikan. Anda juga dapat menyediakan beberapa jalur untuk mengembalikan data dari beberapa tempat dalam dokumen SintaksisSintaksnya seperti ini JSON_EXTRACT(json_doc, path[, path] ...)_ Di mana SELECT JSON_EXTRACT('{"a": 1, "b": 2, "c": 3}', '$.b') AS 'Result';8 adalah dokumen JSON dan SELECT JSON_EXTRACT('{"a": 1, "b": 2, "c": 3}', '$.b') AS 'Result';9 adalah jalur ke nilai yang akan dikembalikan Jika ada kemungkinan bahwa argumen tersebut dapat mengembalikan beberapa nilai, nilai yang cocok akan dibungkus secara otomatis sebagai larik, dalam urutan yang sesuai dengan jalur yang menghasilkannya Contoh 1 – Penggunaan DasarBerikut adalah contoh untuk ditunjukkan SELECT JSON_EXTRACT('{"a": 1, "b": 2, "c": 3}', '$.b') AS 'Result'; Hasil +--------+ | Result | +--------+ | 2 | +--------+ Dalam hal ini, kami mengembalikan nilai kunci +--------+ | Result | +--------+ | 2 | +--------+0 Ini contoh lainnya SELECT JSON_EXTRACT('{"Name": "Bart", "Age": 10}', '$.Name') AS 'Result'; Hasil +--------+ | Result | +--------+ | "Bart" | +--------+_ Contoh 2 – Jalur Tidak AdaJika Anda menentukan jalur yang tidak ada, nilai NULL dikembalikan SELECT JSON_EXTRACT('{"Name": "Homer", "Age": 39}', '$.Gender') AS 'Result';_ Hasil +--------+ | Result | +--------+ | NULL | +--------+ Anda juga akan mendapatkan nilai NULL jika salah satu argumennya adalah +--------+ | Result | +--------+ | 2 | +--------+1 Contoh 3 – ArrayBerikut adalah contoh menggunakan array SELECT JSON_EXTRACT('[1, 2, 3]', '$[2]') AS 'Result'; Hasil +--------+ | Result | +--------+ | 3 | +--------+ Array menggunakan penomoran berbasis nol, jadi dalam hal ini, elemen ketiga diganti Ini contoh larik lainnya. Kali ini kami mengembalikan nilai dari array bersarang SELECT JSON_EXTRACT('[1, 2, [3, 4, 5]]', '$[2][1]') AS 'Result'; Hasil SELECT JSON_EXTRACT('{"a": 1, "b": 2, "c": 3}', '$.b') AS 'Result';0 Contoh 4 – Beberapa JalurAnda dapat menentukan lebih dari satu jalur untuk mengembalikan data dari berbagai tempat dalam dokumen JSON JSON adalah format pertukaran data ringan yang mudah dibaca dan ditulis oleh manusia, dan mudah untuk diurai dan dibuat oleh mesin Data JSON sering digunakan dalam aplikasi web untuk menyimpan dan bertukar data dalam format terstruktur. Itu juga digunakan di banyak RESTful API untuk mengembalikan data dalam format standar yang dapat dengan mudah diuraikan oleh aplikasi klien Pada artikel ini, kami akan menunjukkan cara menggunakan fungsi 0 di MySQL8. 0 untuk mengonversi tabel JSON menjadi data tabular untuk analisis dan laporan, dan juga cara menggunakannya di Holistik untuk laporan drag-and-dropContoh di bawah menggunakan kumpulan data sampel _1 yang disediakan oleh Google. Semua kueri ditulis dalam Holistik menggunakan MySQL 8. 0Bagaimana data JSON disimpan di MySQL 8. 0Data JSON di MySQL diperlakukan sebagai tipe datanya sendiri, string JSON, dan dapat muncul dalam 2 bentuk utama
Seperti apa tampilan objek JSONMari kita lihat kolom _2 di kumpulan data 3
Seperti yang diperlihatkan, satu record disimpan sebagai larik kunci yang dipasangkan dengan nilai yang sesuai Itu dapat memiliki objek lain yang disimpan di dalamnya, seperti di 4
Mengekstrak dari objek JSON menggunakan JSON_EXTRACT() / { "medium": "(none)", "source": "(direct)", "keyword": null, "campaign": "(not set)", "adContent": null, "campaignCode": null, "isTrueDirect": null, "referralPath": null, "adwordsClickInfo": { "page": 1, "slot": "Top", "gclId": "CjwKCAjwzYDMBRA1EiwAwCv6JgtTqBxSwgf2SWlnlbhLqjlcFnBEGCYZYXniDhqV3YB5D-X1H-LVNxoC6_wQAvD_BwE", "adGroupId": null, "isVideoAd": false, "campaignId": null, "creativeId": null, "criteriaId": null, "customerId": null, "adNetworkType": "Google Search", "targetingCriteria": null, "criteriaParameters": "not available in demo dataset" } } 6Mari siapkan mereka untuk model kita menggunakan 2 dan 8. Untuk string JSON sederhana seperti ini, kita hanya perlu menggunakan fungsi JSON_EXTRACT() Kode sampel
KeluaranSintaksisInilah cara kami menggunakan 6Catatan. _6 adalah singkatan dari JSON_EXTRACT() Sintaksnya adalah sebagai berikut
Jadi untuk mengekstrak _4 dari 5, kami menggunakan
Dan untuk mengekstrak _6 dari 5, kami menggunakan
Dan untuk mengekstrak objek anak, cukup tambahkan 8 ke akhir 9 seperti yang kita lakukan saat mengekstraksi 0 dan 1 dari dalam 8 seperti itu
Satu hal utama yang perlu diperhatikan adalah bahwa data yang diekstraksi akan memiliki tipe data JSON dan Anda mungkin harus menyarangkannya di dalam fungsi 3 atau membuat dimensi khusus dalam Holistik untuk mengubahnya menjadi tipe data pilihan AndaAda argumen lain yang mungkin Anda perlukan yang tidak digunakan dalam panduan kami. Silakan merujuk ke untuk daftar lengkap argumen JSON_EXTRACT() dalam HolistikDi Holistik, Anda dapat dengan mudah dan menggunakan kode SQL yang sama seperti di atas untuk membuat model dengan nilai yang sudah diekstrak ke dalam bidang, siap untuk penggunaan pelaporan Namun, jika Anda mengerjakan model yang tidak memiliki nilai yang diekstraksi, Anda dapat membuat untuk mengekstraknya lalu menggunakannya dalam pembuatan laporan seret dan lepas Yang harus Anda lakukan adalah menggunakan sintaks yang sama dengan argumen 5 Anda untuk bidang yang diinginkan. Anda juga dapat menumpuknya di dalam fungsi _3 untuk mengubahnya ke tipe data yang sesuaiSeperti apa Tabel JSON ituSeperti yang kita lihat sebelumnya dengan _4, tipe data JSON dapat menyimpan data di dalam data. Jadi jika kolom anak bersarang Anda juga merupakan kolom bersarang, itu bisa menjadi jauh lebih kompleks, menyimpan seluruh tabel dalam satu sel. Lihatlah struktur elemen di kolom 4. Setiap elemen adalah larik objek nilai kunci dengan 33 elemen, 13 di antaranya adalah objek bersarang, dan dari 13 itu, 1 memiliki level objek bersarang lainnyaMeskipun berpotensi kuat, jika Anda menyimpan data dengan cara ini, ini dapat menyebabkan banyak masalah di kemudian hari. Kueri Anda menjadi lebih rumit dan hampir mustahil untuk dioptimalkan dalam beberapa kasus Jika Anda mencoba menggunakan fungsi _0 yang mampu unnesting (atau meratakan) array bersarangMengekstrak dari Array JSON Bersarang menggunakan { "medium": "(none)", "source": "(direct)", "keyword": null, "campaign": "(not set)", "adContent": null, "campaignCode": null, "isTrueDirect": null, "referralPath": null, "adwordsClickInfo": { "page": 1, "slot": "Top", "gclId": "CjwKCAjwzYDMBRA1EiwAwCv6JgtTqBxSwgf2SWlnlbhLqjlcFnBEGCYZYXniDhqV3YB5D-X1H-LVNxoC6_wQAvD_BwE", "adGroupId": null, "isVideoAd": false, "campaignId": null, "creativeId": null, "criteriaId": null, "customerId": null, "adNetworkType": "Google Search", "targetingCriteria": null, "criteriaParameters": "not available in demo dataset" } } 0Kode sampel
KeluaranSintaksisHal pertama yang harus Anda perhatikan adalah tidak seperti fungsi 5, 0 adalah argumen 5. Itu mengubah kolom menjadi tabel dengan kolom yang kemudian dapat Anda panggil dalam argumen 5 AndaKedua, Anda harus memanggil tabel sumber Anda selain fungsi 0 dalam argumen 5 Anda. Ini juga membuat _9 implisit di antara 2 tabel, itulah sebabnya Anda dapat memanggil bidang yang terletak di tabel sumber Anda dalam kueri yang sama tanpa harus menulis sendiri kondisi 9. (mis. g. disebut _1 dari tabel sumber dan dikaitkan dengan benar untuk setiap baris)Mari kita lihat penggunaannya dalam beberapa baris ini
JSON_TABLE( 2 , 3 KOLOM( 4 5 6 PATH '$. 9')Argumen seperti pada contoh n. hits → Sumber data, panggil kolom JSON yang ingin Anda ekstrak nilainya 8 → indeks/elemen spesifik yang Anda ekstrak. Jika Anda hanya ingin mengekstrak data dari beberapa elemen yang tercantum, ubah argumen ini menjadi 9. Atau jika Anda hanya ingin mengekstraksi elemen dengan nomor indeksnya, ganti '*' dengan indeks atau indeks pilihan Anda. e. g. elemen pertama saja adalah _0, 3 elemen pertama adalah 1. Jika tidak, _8 akan mengekstrak data dari semua elemen yang tersedia 3 → cantumkan kolom yang ingin Anda ekstrak
Ada argumen lain yang mungkin Anda perlukan yang tidak digunakan dalam panduan kami. Silakan merujuk ke dokumentasi resmi untuk daftar lengkap argumen { "medium": "(none)", "source": "(direct)", "keyword": null, "campaign": "(not set)", "adContent": null, "campaignCode": null, "isTrueDirect": null, "referralPath": null, "adwordsClickInfo": { "page": 1, "slot": "Top", "gclId": "CjwKCAjwzYDMBRA1EiwAwCv6JgtTqBxSwgf2SWlnlbhLqjlcFnBEGCYZYXniDhqV3YB5D-X1H-LVNxoC6_wQAvD_BwE", "adGroupId": null, "isVideoAd": false, "campaignId": null, "creativeId": null, "criteriaId": null, "customerId": null, "adNetworkType": "Google Search", "targetingCriteria": null, "criteriaParameters": "not available in demo dataset" } } _0 dalam HolistikSeperti disebutkan di atas, fungsi _0 dipanggil dalam argumen 5 Anda. Dengan demikian, Anda tidak dapat membuat dimensi khusus untuk mengekstraknya dan itu harus ditetapkan dalam SQL Anda dalam model transformasi data sejak awal. Apa pun yang Anda ekstrak kemudian dapat digunakan sebagai bidang untuk membuat laporan dengan seret dan lepasKesimpulanMySQL8. 0 adalah alat yang ampuh untuk membaca dan memformat data JSON. Dengan beberapa langkah, ini dapat siap untuk pelaporan dan analisis dalam Holistik. Kami harap panduan ini bermanfaat. Kirimkan pesan kepada kami jika menurut Anda kami melewatkan kasus penggunaan yang penting Bagaimana cara mengekstrak nilai dari JSON di SQL?Cara mengekstrak nilai dari bidang JSON bertingkat di SQL . Postgres. Gunakan operator ->> untuk mengekstrak nilai sebagai teks, dan -> untuk mengekstrak objek JSON. pilih my_json_field ->> 'userId', my_json_field -> 'transaction' ->> 'id', my_json_field -> 'transaction' ->> 'sku' dari my_table; Pergeseran merah. . MySQL Bagaimana cara mengekstrak nilai dari bidang JSON bersarang di MySQL?Untuk mengkueri objek JSON bersarang di MySQL, Anda dapat menggunakan fungsi JSON_EXTRACT() untuk mengekstrak nilai kunci bersarang lalu .
Bagaimana cara mengekstrak nilai dari JSON?Untuk mengekstrak nama dan memproyeksikan properti dari string JSON, gunakan fungsi json_extract seperti pada contoh berikut. Fungsi json_extract mengambil kolom yang berisi string JSON, dan mencarinya menggunakan ekspresi mirip JSONPath dengan titik. notasi. JSONPath melakukan traversal pohon sederhana.
Bagaimana cara menggunakan array JSON di MySQL?Menambahkan Data JSON . JSON_ARRAY(), yang membuat array. Sebagai contoh. -- mengembalikan [1, 2, "abc"]. SELECT JSON_ARRAY(1, 2, 'abc'); Fungsi JSON_OBJECT(), yang membuat objek. Sebagai contoh. . Fungsi JSON_QUOTE(), yang mengutip string sebagai nilai JSON. Sebagai contoh. . atau Anda bisa (CAST anyValue AS JSON) |