Nilai ekstrak mysql dari array json

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 JSON_EXTRACT, maka -> dan ->> operator lebih ramah

Baca nilai Array JSON

Buat variabel @myjson sebagai tipe JSON ()

SELECT beberapa anggota

Ekstrak path oleh -> atau ->> Operator, sedangkan ->> adalah nilai UNQUOTED

Jadi col->>path sama dengan JSON_UNQUOTE(JSON_EXTRACT(col,path))

Seperti halnya ->, operator ->> selalu diperluas dalam output EXPLAIN, seperti yang ditunjukkan contoh berikut

Membaca tentang

Sintaksis

  • JSON_EXTRACT(json_doc,jalur[,. ])
  • JSON_EXTRACT(json_doc,jalur)
  • JSON_EXTRACT(json_doc,jalur1,jalur2)

Parameter

ParameterDescriptionjson_docvalid JSON documentpathmembers path

Disebutkan dalam

  • Beberapa nilai yang cocok dengan argumen jalur

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

Sintaksis

Sintaksnya 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 Dasar

Berikut 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 Ada

Jika 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 – Array

Berikut 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 Jalur

Anda 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 JSON_EXTRACT() dan

{
  "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 di MySQL8. 0 untuk mengonversi tabel JSON menjadi data tabular untuk analisis dan laporan, dan juga cara menggunakannya di Holistik untuk laporan drag-and-drop

Contoh di bawah menggunakan kumpulan data sampel

{
  "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"
  }
}
_1 yang disediakan oleh Google. Semua kueri ditulis dalam Holistik menggunakan MySQL 8. 0

Bagaimana data JSON disimpan di MySQL 8. 0

Data JSON di MySQL diperlakukan sebagai tipe datanya sendiri, string JSON, dan dapat muncul dalam 2 bentuk utama

  • Objek nilai kunci. satu rekaman yang terdiri dari beberapa bidang (atau kunci) bernama atau terindeks yang dipasangkan dengan nilai
  • Larik/Tabel Bersarang. tabel yang dibuat dengan beberapa objek nilai kunci dalam format hierarkis

Seperti apa tampilan objek JSON

Mari kita lihat kolom

{
  "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"
  }
}
_2 di kumpulan data
{
  "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"
  }
}
3

{
  "hits": 2,
  "visits": 1,
  "bounces": null,
  "newVisits": 1,
  "pageviews": 2,
  "timeOnSite": 189,
  "screenviews": null,
  "timeOnScreen": null,
  "transactions": null,
  "sessionQualityDim": 1,
  "uniqueScreenviews": null,
  "transactionRevenue": null,
  "totalTransactionRevenue": null
}

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

{
  "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"
  }
}
4

{
  "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"
  }
}

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" } } 6

Mari siapkan mereka untuk model kita 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"
  }
}
2 dan
{
  "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"
  }
}
8. Untuk string JSON sederhana seperti ini, kita hanya perlu menggunakan fungsi JSON_EXTRACT()

Kode sampel

select
  data.visit_id as visit_id,
  json_extract(data.totals, '$.hits') as hits,
  data.totals ->> '$.pageviews' as pageviews,
  json_extract(data.traffic_source, '$.adwordsClickInfo.adNetworkType') as adNetworkType,
  data.traffic_source ->>'$.adwordsClickInfo.gclId' as gclId
from
  demo_nested_data as data

Keluaran

Nilai ekstrak mysql dari array json

Sintaksis

Inilah cara kami 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"
  }
}
6
Catatan.
{
  "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"
  }
}
_6 adalah singkatan dari JSON_EXTRACT()

Sintaksnya adalah sebagai berikut

JSON_EXTRACT(table.column, '$.childcolumn') as alias,
table.column ->> '$.childcolumn' as alias

Jadi untuk mengekstrak

select
  data.visit_id as visit_id,
  json_extract(data.totals, '$.hits') as hits,
  data.totals ->> '$.pageviews' as pageviews,
  json_extract(data.traffic_source, '$.adwordsClickInfo.adNetworkType') as adNetworkType,
  data.traffic_source ->>'$.adwordsClickInfo.gclId' as gclId
from
  demo_nested_data as data
_4 dari
select
  data.visit_id as visit_id,
  json_extract(data.totals, '$.hits') as hits,
  data.totals ->> '$.pageviews' as pageviews,
  json_extract(data.traffic_source, '$.adwordsClickInfo.adNetworkType') as adNetworkType,
  data.traffic_source ->>'$.adwordsClickInfo.gclId' as gclId
from
  demo_nested_data as data
5, kami menggunakan

json_extract(data.totals, '$.hits') as hits

Dan untuk mengekstrak

select
  data.visit_id as visit_id,
  json_extract(data.totals, '$.hits') as hits,
  data.totals ->> '$.pageviews' as pageviews,
  json_extract(data.traffic_source, '$.adwordsClickInfo.adNetworkType') as adNetworkType,
  data.traffic_source ->>'$.adwordsClickInfo.gclId' as gclId
from
  demo_nested_data as data
_6 dari
select
  data.visit_id as visit_id,
  json_extract(data.totals, '$.hits') as hits,
  data.totals ->> '$.pageviews' as pageviews,
  json_extract(data.traffic_source, '$.adwordsClickInfo.adNetworkType') as adNetworkType,
  data.traffic_source ->>'$.adwordsClickInfo.gclId' as gclId
from
  demo_nested_data as data
5, kami menggunakan

data.totals ->> '$.pageviews' as pageviews 

Dan untuk mengekstrak objek anak, cukup tambahkan

select
  data.visit_id as visit_id,
  json_extract(data.totals, '$.hits') as hits,
  data.totals ->> '$.pageviews' as pageviews,
  json_extract(data.traffic_source, '$.adwordsClickInfo.adNetworkType') as adNetworkType,
  data.traffic_source ->>'$.adwordsClickInfo.gclId' as gclId
from
  demo_nested_data as data
8 ke akhir
select
  data.visit_id as visit_id,
  json_extract(data.totals, '$.hits') as hits,
  data.totals ->> '$.pageviews' as pageviews,
  json_extract(data.traffic_source, '$.adwordsClickInfo.adNetworkType') as adNetworkType,
  data.traffic_source ->>'$.adwordsClickInfo.gclId' as gclId
from
  demo_nested_data as data
9 seperti yang kita lakukan saat mengekstraksi
JSON_EXTRACT(table.column, '$.childcolumn') as alias,
table.column ->> '$.childcolumn' as alias
0 dan
JSON_EXTRACT(table.column, '$.childcolumn') as alias,
table.column ->> '$.childcolumn' as alias
1 dari dalam
{
  "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"
  }
}
8 seperti itu

json_extract(data.traffic_source, '$.adwordsClickInfo.adNetworkType') as adNetworkType,
data.traffic_source ->>'$.adwordsClickInfo.gclId' as gclId

Satu hal utama yang perlu diperhatikan adalah bahwa data yang diekstraksi akan memiliki tipe data JSON dan Anda mungkin harus menyarangkannya di dalam fungsi

JSON_EXTRACT(table.column, '$.childcolumn') as alias,
table.column ->> '$.childcolumn' as alias
3 atau membuat dimensi khusus dalam Holistik untuk mengubahnya menjadi tipe data pilihan Anda

Ada argumen lain yang mungkin Anda perlukan yang tidak digunakan dalam panduan kami. Silakan merujuk ke untuk daftar lengkap argumen

JSON_EXTRACT() dalam Holistik

Di 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

Nilai ekstrak mysql dari array json
Nilai ekstrak mysql dari array json

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

JSON_EXTRACT(table.column, '$.childcolumn') as alias,
table.column ->> '$.childcolumn' as alias
5 Anda untuk bidang yang diinginkan. Anda juga dapat menumpuknya di dalam fungsi
JSON_EXTRACT(table.column, '$.childcolumn') as alias,
table.column ->> '$.childcolumn' as alias
_3 untuk mengubahnya ke tipe data yang sesuai

Nilai ekstrak mysql dari array json
Nilai ekstrak mysql dari array json

Seperti apa Tabel JSON itu

Seperti yang kita lihat sebelumnya dengan

{
  "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"
  }
}
_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
select
  data.visit_id as visit_id,
  json_extract(data.totals, '$.hits') as hits,
  data.totals ->> '$.pageviews' as pageviews,
  json_extract(data.traffic_source, '$.adwordsClickInfo.adNetworkType') as adNetworkType,
  data.traffic_source ->>'$.adwordsClickInfo.gclId' as gclId
from
  demo_nested_data as data
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 lainnya

Meskipun 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 JSON_EXTRACT() bersarang, kueri Anda mungkin meledak. Untungnya, MySQL 8. 0 memiliki fungsi

{
  "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 yang mampu unnesting (atau meratakan) array bersarang

Mengekstrak 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" } } 0

Kode sampel

select
  n.visit_id,
  h.*
from
  demo_nested_data n,
  JSON_TABLE(
    n.hits,
    '$[*]' COLUMNS(
      time INT PATH '$.time',
      isInteraction bool PATH '$.isInteraction',
      NESTED PATH '$.page' COLUMNS(
        pageTitle VARCHAR(100) PATH '$.pageTitle',
        pagePath VARCHAR(40) PATH '$.pagePath'
      )
    )
  ) as h

Keluaran

Nilai ekstrak mysql dari array json

Sintaksis

Hal pertama yang harus Anda perhatikan adalah tidak seperti fungsi JSON_EXTRACT() yang merupakan argumen

JSON_EXTRACT(table.column, '$.childcolumn') as alias,
table.column ->> '$.childcolumn' as alias
5,
{
  "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 adalah argumen
json_extract(data.totals, '$.hits') as hits
5. Itu mengubah kolom menjadi tabel dengan kolom yang kemudian dapat Anda panggil dalam argumen
JSON_EXTRACT(table.column, '$.childcolumn') as alias,
table.column ->> '$.childcolumn' as alias
5 Anda

Kedua, Anda harus memanggil tabel sumber Anda selain fungsi

{
  "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 argumen
json_extract(data.totals, '$.hits') as hits
5 Anda. Ini juga membuat
json_extract(data.totals, '$.hits') as hits
_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
json_extract(data.totals, '$.hits') as hits
9. (mis. g. disebut
data.totals ->> '$.pageviews' as pageviews 
_1 dari tabel sumber dan dikaitkan dengan benar untuk setiap baris)

Mari kita lihat penggunaannya dalam beberapa baris ini

JSON_TABLE(
    n.hits,
    '$[*]' COLUMNS(
      time INT PATH '$.time',
      NESTED PATH '$.page' COLUMNS(pageTitle VARCHAR(100) PATH '$.pageTitle')
    )

JSON_TABLE(

data.totals ->> '$.pageviews' as pageviews 
2 ,
data.totals ->> '$.pageviews' as pageviews 
3 KOLOM(
data.totals ->> '$.pageviews' as pageviews 
4
data.totals ->> '$.pageviews' as pageviews 
5
data.totals ->> '$.pageviews' as pageviews 
6 PATH '$.
select
  data.visit_id as visit_id,
  json_extract(data.totals, '$.hits') as hits,
  data.totals ->> '$.pageviews' as pageviews,
  json_extract(data.traffic_source, '$.adwordsClickInfo.adNetworkType') as adNetworkType,
  data.traffic_source ->>'$.adwordsClickInfo.gclId' as gclId
from
  demo_nested_data as data
9')

Argumen seperti pada contoh

n. hits → Sumber data, panggil kolom JSON yang ingin Anda ekstrak nilainya

data.totals ->> '$.pageviews' as pageviews 
8 → indeks/elemen spesifik yang Anda ekstrak. Jika Anda hanya ingin mengekstrak data dari beberapa elemen yang tercantum, ubah argumen ini menjadi
data.totals ->> '$.pageviews' as pageviews 
9. Atau jika Anda hanya ingin mengekstraksi elemen dengan nomor indeksnya, ganti '*' dengan indeks atau indeks pilihan Anda. e. g. elemen pertama saja adalah
json_extract(data.traffic_source, '$.adwordsClickInfo.adNetworkType') as adNetworkType,
data.traffic_source ->>'$.adwordsClickInfo.gclId' as gclId
_0, 3 elemen pertama adalah
json_extract(data.traffic_source, '$.adwordsClickInfo.adNetworkType') as adNetworkType,
data.traffic_source ->>'$.adwordsClickInfo.gclId' as gclId
1. Jika tidak,
data.totals ->> '$.pageviews' as pageviews 
_8 akan mengekstrak data dari semua elemen yang tersedia

json_extract(data.traffic_source, '$.adwordsClickInfo.adNetworkType') as adNetworkType,
data.traffic_source ->>'$.adwordsClickInfo.gclId' as gclId
3 → cantumkan kolom yang ingin Anda ekstrak

  • 'time' / 'pageTitle' → alias yang diinginkan
  • json_extract(data.traffic_source, '$.adwordsClickInfo.adNetworkType') as adNetworkType,
    data.traffic_source ->>'$.adwordsClickInfo.gclId' as gclId
    4 /
    json_extract(data.traffic_source, '$.adwordsClickInfo.adNetworkType') as adNetworkType,
    data.traffic_source ->>'$.adwordsClickInfo.gclId' as gclId
    5 → tipe data yang diinginkan
  • JALAN '$. waktu' / JALAN '$. pageTitle' → menunjuk kolom anak yang akan diekstraksi
  • json_extract(data.traffic_source, '$.adwordsClickInfo.adNetworkType') as adNetworkType,
    data.traffic_source ->>'$.adwordsClickInfo.gclId' as gclId
    _6 '$. page'→ Jika kolom anak yang Anda panggil bersarang di dalam kolom lain, gunakan argumen ini dan tentukan kolom anak tempat data Anda disarangkan, lalu buat
    json_extract(data.traffic_source, '$.adwordsClickInfo.adNetworkType') as adNetworkType,
    data.traffic_source ->>'$.adwordsClickInfo.gclId' as gclId
    3 argumen lain di dalamnya

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 Holistik

Seperti disebutkan di atas, fungsi

{
  "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 dipanggil dalam argumen
json_extract(data.totals, '$.hits') as hits
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 lepas

Nilai ekstrak mysql dari array json
Nilai ekstrak mysql dari array json

Kesimpulan

MySQL8. 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)