JsonQ adalah paket PHP sederhana dan elegan untuk melakukan Kueri pada semua jenis Data JSON. Ini akan membuat hidup Anda lebih mudah dengan memberikan rasa kueri mirip ORM di JSON Anda.
Hai, tolong bantu saya untuk meningkatkan proyek ini setiap hari
Dari versi JsonQ 6.0 semua fitur ditulis ulang dari QAarray. Setelah sekian lama kami menyadari bahwa Mesin Kueri JsonQ harus terpisah. Karena orang ingin menanyakan berbagai jenis data seperti CSV, YAML, XML. Jadi jika kita menjaga mesin kueri tetap digabungkan dengan proyek ini, itu tidak masuk akal. Itu sebabnya kami memindahkan bagian Mesin Kueri dan mengembangkan paket baru QAarray. Qarray dirancang untuk melakukan kueri pada array PHP asli dan siapa pun dapat mengimplementasikan Mesin mereka sendiri, seperti JsonQ.
Harap jangan perbarui ke versi >= 6.0 langsung dari bawah
composer require nahid/jsonq
Anda dapat langsung mulai menggunakan paket ini dengan mengimpor data JSON Anda dari sebuah file:
use Nahid /JsonQ/Jsonq;
$ jsonq = new Jsonq ( ' data.json ' );
Atau dari String JSON:
$ json -> json ( ' {"id": 1, "name": "Nahid"} ' );
Atau dari Array PHP:
$ json -> collect ([ ' id ' => 1 , ' name ' => ' Nahid ' ]);
Anda dapat memulai Kueri data Anda menggunakan berbagai metode kueri seperti find , Where , orWhere , WhereIn , WhereStartsWith , WhereEndsWith , WhereContains dan seterusnya. Anda juga dapat menggabungkan data Anda setelah kueri menggunakan sum , count , groupBy , max , min dll.
Mari kita lihat contoh singkatnya:
//data.json
{
"name" : " products " ,
"description" : " Features product list " ,
"vendor" :{
"name" : " Computer Source BD " ,
"email" : " [email protected] " ,
"website" : " www.example.com "
},
"users" :[
{ "id" : 1 , "name" : " Johura Akter Sumi " , "location" : " Barisal " },
{ "id" : 2 , "name" : " Mehedi Hasan Nahid " , "location" : " Barisal " },
{ "id" : 3 , "name" : " Ariful Islam " , "location" : " Barisal " },
{ "id" : 4 , "name" : " Suhel Ahmed " , "location" : " Sylhet " },
{ "id" : 5 , "name" : " Firoz Serniabat " , "location" : " Gournodi " },
{ "id" : 6 , "name" : " Musa Jewel " , "location" : " Barisal " , "visits" : [
{ "name" : " Sylhet " , "year" : 2011 },
{ "name" : " Cox's Bazar " , "year" : 2012 },
{ "name" : " Bandarbar " , "year" : 2014 }
]}
],
"products" : [
{ "id" : 1 , "user_id" : 2 , "city" : " bsl " , "name" : " iPhone " , "cat" : 1 , "price" : 80000 },
{ "id" : 2 , "user_id" : 2 , "city" : null , "name" : " macbook pro " , "cat" : 2 , "price" : 150000 },
{ "id" : 3 , "user_id" : 2 , "city" : " dhk " , "name" : " Redmi 3S Prime " , "cat" : 1 , "price" : 12000 },
{ "id" : 4 , "user_id" : 1 , "city" : null , "name" : " Redmi 4X " , "cat" : 1 , "price" : 15000 },
{ "id" : 5 , "user_id" : 1 , "city" : " bsl " , "name" : " macbook air " , "cat" : 2 , "price" : 110000 },
{ "id" : 6 , "user_id" : 2 , "city" : null , "name" : " macbook air 1 " , "cat" : 2 , "price" : 81000 }
]
}
use Nahid JsonQ Jsonq ;
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 2 )
-> get ();
dump ( $ res );
//This will print
/*
array:3 [▼
1 => {#7 ▼
+"id": 2
+"user_id": 2
+"city": null
+"name": "macbook pro"
+"cat": 2
+"price": 150000
}
4 => {#8 ▼
+"id": 5
+"user_id": 1
+"city": "bsl"
+"name": "macbook air"
+"cat": 2
+"price": 110000
}
5 => {#9 ▼
+"id": 6
+"user_id": 2
+"city": null
+"name": "macbook air 1"
+"cat": 2
+"price": 81000
}
]
*/
Katakanlah kita ingin mendapatkan Penjumlahan harga dari hasil Query. Kita dapat melakukannya dengan mudah dengan memanggil metode sum() alih-alih get() :
$ result = $ json -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 2 )
-> sum ( ' price ' );
dump ( $ result );
//It will print:
/*
365000
*/
Cukup rapi, ya?
Mari jelajahi API selengkapnya untuk melihat keajaiban apa lagi yang dapat dilakukan perpustakaan ini untuk Anda. Baiklah?
Contoh API berikut ditampilkan berdasarkan contoh data JSON yang diberikan di sini. Untuk mendapatkan gambaran yang lebih baik tentang contoh, lihat data JSON tersebut terlebih dahulu. Contoh detail setiap API juga dapat ditemukan di sini.
Daftar API:
fetch()
Metode ini akan mengeksekusi query dan mengembalikan data yang dihasilkan. Anda harus memanggilnya akhirnya setelah menggunakan beberapa metode kueri. Detailnya dapat ditemukan di contoh API lainnya.
find(path)
path
-- hierarki jalur data yang ingin Anda temukan. Anda tidak perlu memanggil metode fetch()
setelah ini. Karena metode ini akan mengambil dan mengembalikan data dengan sendirinya.
peringatan: Anda tidak dapat merangkai metode kueri lebih lanjut setelahnya. Jika Anda membutuhkannya, Anda harus menggunakan metode at()
atau from()
.
contoh:
Katakanlah Anda ingin mendapatkan nilai properti 'kota' dari Data Json Anda. Anda dapat melakukannya seperti ini:
$ q = new Jsonq ( ' data.json ' );
echo $ q -> find ( ' vendor.name ' );
Jika Anda ingin menelusuri hierarki lebih dalam, Anda dapat melakukannya seperti:
$ q = new Jsonq ( ' data.json ' );
echo $ q -> find ( ' vendor.name ' );
Lihat contoh detailnya di sini.
from(path)
path
(opsional) -- hierarki jalur data tempat Anda ingin memulai kueri. Secara default, kueri akan dimulai dari root Data JSON yang Anda berikan. Jika Anda ingin berpindah terlebih dahulu ke hierarki jalur data bersarang tempat Anda ingin memulai kueri, Anda akan menggunakan metode ini. Melewati parameter path
atau memberikan '.' sebagai parameter juga akan memulai kueri dari Data root.
Perbedaan antara metode ini dan find()
adalah, metode find()
akan mengembalikan data dari hierarki jalur yang diberikan. Di sisi lain, metode ini akan mengembalikan instance Object, sehingga Anda dapat melanjutkan metode kueri rantai setelahnya.
contoh:
Katakanlah Anda ingin memulai kueri atas nilai properti 'vendor.name' dari Data JSON Anda. Anda dapat melakukannya seperti ini:
$ q = new Jsonq ( ' data.json ' );
echo $ q -> from ( ' vendor.name ' )-> get ();
Jika Anda ingin menelusuri hierarki lebih dalam, Anda dapat melakukannya seperti:
$ q = new Jsonq ( ' data.json ' );
echo $ q -> from ( ' users.5.visits ' )-> get ();
Lihat contoh detailnya di sini.
at(path)
Ini adalah metode alias dari from()
dan akan berperilaku persis seperti itu. Lihat contohnya di sini.
where(key, condition, val)
key
-- nama properti data. Atau Anda dapat meneruskan Fungsi di sini untuk mengelompokkan beberapa kueri di dalamnya. Lihat detailnya dalam contoh
val
-- nilai yang akan dicocokkan. Ini bisa berupa int , string , bool atau bahkan Function - tergantung pada op
.
op
-- operan yang akan digunakan untuk pencocokan. Operan berikut tersedia untuk digunakan:
=
: Untuk pencocokan kesetaraan yang lemaheq
: Sama dengan =
!=
: Untuk pencocokan yang lemah dan tidak setaraneq
: Sama seperti !=
==
: Untuk pencocokan kesetaraan yang ketatseq
: Sama seperti ==
!==
: Untuk pencocokan ketat bukan kesetaraansneq
: Sama seperti !==
>
: Periksa apakah nilai kunci yang diberikan dalam data lebih besar dari valgt
: Sama seperti >
<
: Periksa apakah nilai kunci yang diberikan dalam data Kurang dari vallt
: Sama dengan <
>=
: Periksa apakah nilai kunci yang diberikan dalam data lebih besar dari atau sama dengan valgte
: Sama seperti >=
<=
: Periksa apakah nilai kunci yang diberikan dalam data Kurang dari atau Sama dengan vallte
: Sama seperti <=
null
: Periksa apakah nilai kunci yang diberikan dalam data adalah null (parameter val
di where()
dapat dihilangkan untuk op
ini)notnull
: Periksa apakah nilai kunci yang diberikan dalam data bukan nol (parameter val
di where()
dapat dihilangkan untuk op
ini)in
: Periksa apakah nilai kunci yang diberikan dalam data ada di val yang diberikan. val harus berupa Array biasa.notin
: Periksa apakah nilai kunci yang diberikan dalam data tidak ada di val yang diberikan. val harus berupa Array biasa.startswith
: Periksa apakah nilai kunci yang diberikan dalam data dimulai dengan (memiliki awalan) val yang diberikan. Ini hanya akan berfungsi untuk data tipe String .endswith
: Periksa apakah nilai kunci yang diberikan dalam data diakhiri dengan (memiliki akhiran) val yang diberikan. Ini hanya akan berfungsi untuk data tipe String .contains
: Periksa apakah nilai kunci yang diberikan dalam data memiliki substring val yang diberikan. Ini hanya akan berfungsi untuk data tipe String .match
: Periksa apakah nilai kunci yang diberikan dalam data memiliki kecocokan Ekspresi Reguler dengan val yang diberikan. Parameter val
harus berupa RegExp untuk op
ini.macro
: Ini akan mencoba mencocokkan nilai kunci yang diberikan dalam data yang mengeksekusi val
yang diberikan. Parameter val
harus berupa Fungsi untuk op
ini. Fungsi ini harus memiliki logika yang cocok di dalamnya dan mengembalikan nilai benar atau salah berdasarkan logika tersebut.contoh:
Katakanlah Anda ingin mencari 'pengguna' yang memiliki id
1
. Anda dapat melakukannya seperti ini:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' users ' )-> where ( ' id ' , ' = ' , 1 )-> get ();
Anda dapat menambahkan beberapa kondisi di mana . Ini akan memberikan hasil dengan melakukan AND di antara beberapa kondisi di mana ini.
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' users ' )
-> where ( ' id ' , ' = ' , 1 )
-> where ( ' location ' , ' = ' , ' barisal ' )
-> get ();
Lihat contoh detailnya di sini.
orWhere(key, op, val)
Parameter orWhere()
sama dengan where()
. Satu-satunya perbedaan antara where()
dan orWhere()
adalah: kondisi yang diberikan oleh metode orWhere()
akan meng-OR-ed hasilnya dengan kondisi lain.
Misalnya, jika Anda ingin mencari pengguna dengan id 1
atau 2
, Anda dapat melakukannya seperti ini:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' users ' )
-> where ( ' id ' , ' = ' , 1 )
-> orWhere ( ' id ' , ' = ' , 2 )
-> get ();
Lihat contoh detailnya di sini.
whereIn(key, val)
key
-- nama properti dataval
-- itu harus berupa Array Metode ini akan berperilaku seperti pemanggilan metode where(key, 'in', val)
.
whereNotIn(key, val)
key
-- nama properti dataval
-- itu harus berupa Array Metode ini akan berperilaku seperti pemanggilan metode where(key, 'notin', val)
.
whereNull(key)
key
-- nama properti data Metode ini akan berperilaku seperti pemanggilan metode where(key, 'null')
atau where(key, '=', null)
.
whereNotNull(key)
key
-- nama properti data Metode ini akan berperilaku seperti pemanggilan metode where(key, 'notnull')
atau where(key, '!=', null)
.
whereStartsWith(key, val)
key
-- nama properti dataval
-- itu harus berupa String Metode ini akan berperilaku seperti pemanggilan metode where(key, 'startswith', val)
.
whereEndsWith(key, val)
key
-- nama properti dataval
-- itu harus berupa String Metode ini akan berperilaku seperti pemanggilan metode where(key, 'endswith', val)
.
whereContains(key, val)
key
-- nama properti dataval
-- itu harus berupa String Metode ini akan berperilaku seperti pemanggilan metode where(key, 'contains', val)
.
sum(column)
column
-- nama properti datacontoh:
Katakanlah Anda ingin mencari jumlah 'harga' dari 'produk' . Anda dapat melakukannya seperti ini:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> sum ( ' price ' );
Jika data yang Anda kumpulkan adalah array biasa, Anda tidak perlu meneruskan parameter 'kolom'. Lihat contoh detailnya di sini
count()
Ini akan mengembalikan jumlah elemen dalam koleksi.
contoh:
Katakanlah Anda ingin mengetahui berapa banyak elemen yang ada di properti 'produk' . Anda dapat melakukannya seperti:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> count ();
Lihat contoh detailnya di sini.
size()
Ini adalah metode alias count()
.
max(column)
column
-- nama properti datacontoh:
Katakanlah Anda ingin mencari 'harga' maksimum dari 'produk' tersebut. Anda dapat melakukannya seperti ini:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
->max('price);
Jika data yang Anda tanyakan adalah array biasa, Anda tidak perlu meneruskan parameter 'kolom'. Lihat contoh detailnya di sini
min(column)
column
-- nama properti datacontoh:
Katakanlah Anda ingin mencari 'harga' minimum 'produk' . Anda dapat melakukannya seperti ini:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> min ( ' price ' );
Jika data yang Anda tanyakan adalah array biasa, Anda tidak perlu meneruskan parameter 'properti'. Lihat contoh detailnya di sini
avg(column)
column
-- nama properti datacontoh:
Katakanlah Anda ingin mencari rata-rata 'harga' 'produk' . Anda dapat melakukannya seperti ini:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> avg ( ' price ' );
Jika data yang Anda tanyakan adalah array biasa, Anda tidak perlu meneruskan parameter 'kolom'. Lihat contoh detailnya di sini
first()
Ini akan mengembalikan elemen pertama dari koleksi.
contoh:
$ q = new jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> first ();
Lihat contoh detailnya di sini.
last()
Ini akan mengembalikan elemen terakhir dari koleksi.
contoh:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> last ();
Lihat contoh detailnya di sini.
nth(index)
index
-- indeks elemen yang akan dikembalikan.Ini akan mengembalikan elemen ke-n dari koleksi. Jika indeks yang diberikan bernilai positif , maka elemen ke-n akan dikembalikan dari awal. Jika indeks yang diberikan bernilai negatif , ia akan mengembalikan elemen ke-n dari akhir.
contoh:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> nth ( 2 );
Lihat contoh detailnya di sini.
exists()
Ini akan mengembalikan nilai true jika elemennya tidak kosong atau tidak null atau bukan array kosong atau bukan objek kosong .
contoh:
Katakanlah Anda ingin mengetahui berapa banyak elemen yang ada di properti 'produk' . Anda dapat melakukannya seperti:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> exists ();
Lihat contoh detailnya di sini.
groupBy(column)
column
-- Properti yang ingin Anda gunakan untuk mengelompokkan koleksi.contoh:
Katakanlah Anda ingin mengelompokkan data 'pengguna' berdasarkan properti 'lokasi' . Anda dapat melakukannya seperti:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' users ' )
-> groupBy ( ' location ' )
-> get ();
Lihat contoh detailnya di sini.
sort(order)
order
-- Jika Anda melewatkan properti 'order', data akan secara default diurutkan dalam urutan menaik . Anda harus meneruskan 'desc' sebagai parameter 'order' untuk mengurutkan data dalam urutan menurun . Selain itu, Anda dapat meneruskan fungsi perbandingan dalam parameter 'urutan' untuk menentukan logika Anda sendiri dalam mengurutkan data.Catatan: Metode ini harus digunakan untuk Array biasa. Jika Anda ingin mengurutkan Array Objek, Anda harus menggunakan metode sortBy() yang dijelaskan nanti.
contoh:
Katakanlah Anda ingin mengurutkan data 'arr' . Anda dapat melakukannya seperti:
$ q = new Jsonq ();
$ res = $ q -> collect ([ 7 , 5 , 9 , 1 , 3 ])
-> sort ();
Lihat contoh detailnya di sini.
sortBy(column, order)
column
-- Anda harus memasukkan nama kolom tempat penyortiran akan dilakukan.order
-- Jika Anda melewatkan properti 'order', data akan secara default diurutkan dalam urutan menaik . Anda harus meneruskan 'desc' sebagai parameter 'order' untuk mengurutkan data dalam urutan menurun . Selain itu, Anda dapat meneruskan fungsi perbandingan dalam parameter 'urutan' untuk menentukan logika Anda sendiri dalam mengurutkan data.Catatan: Metode ini harus digunakan untuk Array Objek. Jika Anda ingin mengurutkan Array biasa, Anda harus menggunakan metode sortir() yang dijelaskan sebelumnya.
contoh:
Katakanlah Anda ingin mengurutkan data 'harga' dari 'produk' . Anda dapat melakukannya seperti:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> sortBy ( ' price ' , ' desc ' );
Lihat contoh detailnya di sini.
reset(data)
data
-- dapat berupa jalur file JSON, atau string JSON, atau Objek JSON. Jika tidak ada data yang diteruskan dalam parameter data
, instance Objek jsonQ
akan disetel ulang ke data yang diinisialisasi sebelumnya.Kapan saja, Anda mungkin ingin mengatur ulang instance Object ke kumpulan data yang benar-benar berbeda dan kemudian menanyakannya. Anda dapat menggunakan metode ini dalam hal ini.
Lihat contoh detailnya di sini.
copy()
Ini akan mengembalikan tiruan lengkap dari instance Object.
Lihat contoh detailnya di sini.
Jika Anda mengalami bug atau masalah apa pun, jangan ragu untuk membuka masalah di github.
Selain itu, Anda juga dapat mengirimi saya email ke mailto:[email protected] untuk mendapatkan pelukan atau bug.
Paket ini juga memiliki dukungan bahasa yang berbeda.
Hai kawan! Bantu aku untuk beberapa waktu!