JsonQ ist ein einfaches, elegantes PHP-Paket zum Abfragen aller Arten von JSON-Daten. Es wird Ihnen das Leben erleichtern, indem es Ihrem JSON den Eindruck einer ORM-ähnlichen Abfrage verleiht.
Hallo, bitte helfen Sie mir, dieses Projekt täglich zu verbessern
Ab der Version JsonQ 6.0 werden alle Funktionen von QAarray neu geschrieben. Nach längerem Hin und Her ist uns aufgefallen, dass die Query Engine von JsonQ getrennt sein sollte. Weil die Leute verschiedene Arten von Daten wie CSV, YAML, XML abfragen möchten. Wenn wir also die Abfrage-Engine eng mit diesem Projekt verknüpfen, ergibt das keinen Sinn. Aus diesem Grund verschieben wir den Query Engine-Teil und entwickeln ein neues Paket QAarray. Qarray ist für die Abfrage über native PHP-Arrays konzipiert und jeder kann seine eigene Engine wie JsonQ implementieren.
Bitte aktualisieren Sie nicht direkt von unten auf die Version >= 6.0
composer require nahid/jsonq
Sie können dieses Paket sofort verwenden, indem Sie Ihre JSON-Daten aus einer Datei importieren:
use Nahid /JsonQ/Jsonq;
$ jsonq = new Jsonq ( ' data.json ' );
Oder aus einem JSON-String:
$ json -> json ( ' {"id": 1, "name": "Nahid"} ' );
Oder aus einem PHP-Array:
$ json -> collect ([ ' id ' => 1 , ' name ' => ' Nahid ' ]);
Sie können Ihre Daten mit den verschiedenen Abfragemethoden abfragen, z. B. find , where , orWhere , whereIn , whereStartsWith , whereEndsWith , whereContains usw. Sie können Ihre Daten auch nach der Abfrage mit sum , count , groupBy , max , min usw. aggregieren.
Sehen wir uns ein kurzes Beispiel an:
//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
}
]
*/
Nehmen wir an, wir möchten die Preissumme des abgefragten Ergebnisses erhalten. Wir können es einfach tun, indem wir die Methode sum() anstelle von get() aufrufen:
$ result = $ json -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 2 )
-> sum ( ' price ' );
dump ( $ result );
//It will print:
/*
365000
*/
Ziemlich ordentlich, oder?
Lassen Sie uns die vollständige API erkunden, um zu sehen, was diese Bibliothek sonst noch für Sie tun kann. Sollen wir?
Die folgenden API-Beispiele werden basierend auf den hier angegebenen JSON-Beispieldaten gezeigt. Um eine bessere Vorstellung von den Beispielen zu bekommen, schauen Sie sich zuerst die JSON-Daten an. Detaillierte Beispiele für jede API finden Sie hier.
Liste der API:
fetch()
Diese Methode führt Abfragen aus und gibt die resultierenden Daten zurück. Sie müssen es schließlich aufrufen, nachdem Sie einige Abfragemethoden verwendet haben. Details finden Sie in anderen API-Beispielen.
find(path)
path
– die Pfadhierarchie der Daten, die Sie suchen möchten. Danach müssen Sie die Methode fetch()
nicht mehr aufrufen. Weil diese Methode die Daten selbst abruft und zurückgibt.
Vorbehalt: Sie können danach keine weiteren Abfragemethoden verketten. Wenn Sie das benötigen, sollten Sie die Methode at()
oder from()
verwenden.
Beispiel:
Angenommen, Sie möchten den Wert der Eigenschaft „Städte“ Ihrer Json-Daten ermitteln. Sie können es so machen:
$ q = new Jsonq ( ' data.json ' );
echo $ q -> find ( ' vendor.name ' );
Wenn Sie tiefer in die Hierarchie vordringen möchten, können Sie Folgendes tun:
$ q = new Jsonq ( ' data.json ' );
echo $ q -> find ( ' vendor.name ' );
Ein detailliertes Beispiel finden Sie hier.
from(path)
path
(optional) – die Pfadhierarchie der Daten, von denen aus Sie die Abfrage starten möchten. Standardmäßig wird die Abfrage vom Stammverzeichnis der von Ihnen angegebenen JSON-Daten aus gestartet. Wenn Sie zunächst zu einer verschachtelten Pfadhierarchie der Daten wechseln möchten, von der aus Sie Ihre Abfrage starten möchten, verwenden Sie diese Methode. Überspringen des path
oder Angeben von „.“ Als Parameter startet die Abfrage auch von den Stammdaten aus.
Der Unterschied zwischen dieser Methode und find()
besteht darin, dass die Methode find()
die Daten aus der angegebenen Pfadhierarchie zurückgibt. Andererseits gibt diese Methode die Objektinstanz zurück, sodass Sie danach weitere Abfragemethoden verketten können.
Beispiel:
Angenommen, Sie möchten eine Abfrage über die Werte der Eigenschaft „vendor.name“ Ihrer JSON-Daten starten. Sie können es so machen:
$ q = new Jsonq ( ' data.json ' );
echo $ q -> from ( ' vendor.name ' )-> get ();
Wenn Sie tiefer in die Hierarchie vordringen möchten, können Sie Folgendes tun:
$ q = new Jsonq ( ' data.json ' );
echo $ q -> from ( ' users.5.visits ' )-> get ();
Ein detailliertes Beispiel finden Sie hier.
at(path)
Dies ist eine Alias-Methode von from()
und verhält sich genau so. Siehe Beispiel hier.
where(key, condition, val)
key
– der Eigenschaftsname der Daten. Oder Sie können hier eine Funktion übergeben, um darin mehrere Abfragen zu gruppieren. Einzelheiten finden Sie im Beispiel
val
– Wert, mit dem abgeglichen werden soll. Es kann ein int , string , bool oder sogar eine Funktion sein – abhängig von der op
.
op
– Operand, der für den Abgleich verwendet werden soll. Die folgenden Operanden stehen zur Verwendung zur Verfügung:
=
: Für schwache Gleichheitsanpassungeq
: Gleich wie =
!=
: Für schwache Nicht-Gleichheits-Übereinstimmungneq
: Das Gleiche wie !=
==
: Für strikte Gleichheitsanpassungseq
: Das Gleiche wie ==
!==
: Für strikte Nicht-Gleichheits-Übereinstimmungsneq
: Das Gleiche wie !==
>
: Überprüfen Sie, ob der Wert des angegebenen Schlüssels in den Daten größer als der Wert istgt
: Das Gleiche wie >
<
: Überprüfen Sie, ob der Wert des angegebenen Schlüssels in den Daten kleiner als der Wert istlt
: Gleich wie <
>=
: Überprüfen Sie, ob der Wert des angegebenen Schlüssels in den Daten größer oder gleich dem Wert istgte
: Das Gleiche wie >=
<=
: Überprüfen Sie, ob der Wert des angegebenen Schlüssels in den Daten kleiner oder gleich dem Wert istlte
: Gleich wie <=
null
: Überprüfen Sie, ob der Wert des angegebenen Schlüssels in den Daten null ist (der val
in where()
kann für diese op
weggelassen werden).notnull
: Überprüfen Sie, ob der Wert des angegebenen Schlüssels in den Daten nicht null ist (der val
in where()
kann für diese op
weggelassen werden).in
: Überprüfen Sie, ob der Wert des angegebenen Schlüssels in den Daten im angegebenen Wert vorhanden ist. val sollte ein einfaches Array sein.notin
: Überprüfen Sie, ob der Wert des angegebenen Schlüssels in den Daten im angegebenen Wert nicht vorhanden ist. val sollte ein einfaches Array sein.startswith
: Überprüfen Sie, ob der Wert des angegebenen Schlüssels in den Daten mit dem angegebenen Wert beginnt (ein Präfix davon hat). Dies würde nur für Daten vom Typ String funktionieren.endswith
: Überprüfen Sie, ob der Wert des angegebenen Schlüssels in den Daten mit dem angegebenen Wert endet (ein Suffix davon hat). Dies würde nur für Daten vom Typ String funktionieren.contains
: Überprüfen Sie, ob der Wert des angegebenen Schlüssels in den Daten eine Teilzeichenfolge des angegebenen Werts hat. Dies würde nur für Daten vom Typ String funktionieren.match
: Überprüfen Sie, ob der Wert des angegebenen Schlüssels in den Daten eine Übereinstimmung mit einem regulären Ausdruck mit dem angegebenen Wert aufweist. Der val
-Parameter sollte ein RegExp für diese op
sein.macro
: Es würde versuchen, den Wert des angegebenen Schlüssels in den Daten abzugleichen, die den angegebenen val
ausführen. Der val
-Parameter sollte eine Funktion für diese op
sein. Diese Funktion sollte über eine passende Logik verfügen und basierend darauf „true “ oder „false“ zurückgeben.Beispiel:
Nehmen wir an, Sie möchten die „Benutzer“ finden, die die id
1
haben. Sie können es so machen:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' users ' )-> where ( ' id ' , ' = ' , 1 )-> get ();
Sie können mehrere Where -Bedingungen hinzufügen. Das Ergebnis wird durch UND-Verknüpfung zwischen diesen mehreren Where-Bedingungen ermittelt.
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' users ' )
-> where ( ' id ' , ' = ' , 1 )
-> where ( ' location ' , ' = ' , ' barisal ' )
-> get ();
Ein detailliertes Beispiel finden Sie hier.
orWhere(key, op, val)
Die Parameter von orWhere()
sind die gleichen wie where()
. Der einzige Unterschied zwischen where()
und orWhere()
besteht darin, dass die von der orWhere()
Methode angegebene Bedingung das Ergebnis mit anderen Bedingungen ODER-verknüpft.
Wenn Sie beispielsweise Benutzer mit der ID 1
oder 2
finden möchten, können Sie dies folgendermaßen tun:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' users ' )
-> where ( ' id ' , ' = ' , 1 )
-> orWhere ( ' id ' , ' = ' , 2 )
-> get ();
Siehe detailliertes Beispiel hier.
whereIn(key, val)
key
– der Eigenschaftsname der Datenval
– es sollte ein Array sein Diese Methode verhält sich wie ein Methodenaufruf where(key, 'in', val)
.
whereNotIn(key, val)
key
– der Eigenschaftsname der Datenval
– es sollte ein Array sein Diese Methode verhält sich wie ein Aufruf der Methode where(key, 'notin', val)
.
whereNull(key)
key
– der Eigenschaftsname der Daten Diese Methode verhält sich wie der Methodenaufruf where(key, 'null')
oder where(key, '=', null)
.
whereNotNull(key)
key
– der Eigenschaftsname der Daten Diese Methode verhält sich wie der Methodenaufruf where(key, 'notnull')
oder where(key, '!=', null)
.
whereStartsWith(key, val)
key
– der Eigenschaftsname der Datenval
– es sollte ein String sein Diese Methode verhält sich wie der Methodenaufruf where(key, 'startswith', val)
.
whereEndsWith(key, val)
key
– der Eigenschaftsname der Datenval
– es sollte ein String sein Diese Methode verhält sich wie ein Methodenaufruf where(key, 'endswith', val)
.
whereContains(key, val)
key
– der Eigenschaftsname der Datenval
– es sollte ein String sein Diese Methode verhält sich wie ein Aufruf der Methode where(key, 'contains', val)
.
sum(column)
column
– der Eigenschaftsname der DatenBeispiel:
Nehmen wir an, Sie möchten die Summe des „Preises“ der „Produkte“ ermitteln. Sie können es so machen:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> sum ( ' price ' );
Wenn es sich bei den Daten, die Sie aggregieren, um ein einfaches Array handelt, müssen Sie den Parameter „column“ nicht übergeben. Siehe detailliertes Beispiel hier
count()
Es wird die Anzahl der Elemente in der Sammlung zurückgegeben.
Beispiel:
Angenommen, Sie möchten herausfinden, wie viele Elemente die Eigenschaft „products“ enthält. Sie können es so machen:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> count ();
Siehe detailliertes Beispiel hier.
size()
Dies ist eine Alias-Methode von count()
.
max(column)
column
– der Eigenschaftsname der DatenBeispiel:
Nehmen wir an, Sie möchten das Maximum des „Preises“ der „Produkte“ ermitteln. Sie können es so machen:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
->max('price);
Wenn es sich bei den von Ihnen abgefragten Daten um ein einfaches Array handelt, müssen Sie den Parameter „column“ nicht übergeben. Siehe detailliertes Beispiel hier
min(column)
column
– der Eigenschaftsname der DatenBeispiel:
Nehmen wir an, Sie möchten das Minimum des „Preises“ der „Produkte“ ermitteln. Sie können es so machen:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> min ( ' price ' );
Wenn es sich bei den von Ihnen abgefragten Daten um ein einfaches Array handelt, müssen Sie den Parameter „property“ nicht übergeben. Siehe detailliertes Beispiel hier
avg(column)
column
– der Eigenschaftsname der DatenBeispiel:
Nehmen wir an, Sie möchten den durchschnittlichen „Preis“ der „Produkte“ ermitteln. Sie können es so machen:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> avg ( ' price ' );
Wenn es sich bei den von Ihnen abgefragten Daten um ein einfaches Array handelt, müssen Sie den Parameter „column“ nicht übergeben. Siehe detailliertes Beispiel hier
first()
Es wird das erste Element der Sammlung zurückgegeben.
Beispiel:
$ q = new jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> first ();
Siehe detailliertes Beispiel hier.
last()
Es wird das letzte Element der Sammlung zurückgegeben.
Beispiel:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> last ();
Siehe detailliertes Beispiel hier.
nth(index)
index
– Index des Elements, das zurückgegeben werden soll.Es wird das n-te Element der Sammlung zurückgegeben. Wenn der angegebene Index ein positiver Wert ist, wird das n-te Element vom Anfang zurückgegeben. Wenn der angegebene Index ein negativer Wert ist, wird das n-te Element vom Ende zurückgegeben.
Beispiel:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> nth ( 2 );
Siehe detailliertes Beispiel hier.
exists()
Es wird „true“ zurückgegeben, wenn das Element nicht leer oder nicht null oder kein leeres Array oder kein leeres Objekt ist.
Beispiel:
Angenommen, Sie möchten herausfinden, wie viele Elemente die Eigenschaft „products“ enthält. Sie können es so machen:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> exists ();
Siehe detailliertes Beispiel hier.
groupBy(column)
column
– Die Eigenschaft, nach der Sie die Sammlung gruppieren möchten.Beispiel:
Angenommen, Sie möchten die „Benutzer“ -Daten basierend auf der Eigenschaft „Standort“ gruppieren. Sie können es so machen:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' users ' )
-> groupBy ( ' location ' )
-> get ();
Siehe detailliertes Beispiel hier.
sort(order)
order
– Wenn Sie die Eigenschaft „order“ überspringen, werden die Daten standardmäßig aufsteigend sortiert. Sie müssen „desc“ als „order“ -Parameter übergeben, um die Daten in absteigender Reihenfolge zu sortieren. Außerdem können Sie im Parameter „order“ eine Vergleichsfunktion übergeben, um Ihre eigene Logik zum Sortieren der Daten zu definieren.Hinweis: Diese Methode sollte für ein einfaches Array verwendet werden. Wenn Sie ein Array von Objekten sortieren möchten, sollten Sie die später beschriebene Methode sortBy() verwenden.
Beispiel:
Nehmen wir an, Sie möchten die „arr“ -Daten sortieren. Sie können es so machen:
$ q = new Jsonq ();
$ res = $ q -> collect ([ 7 , 5 , 9 , 1 , 3 ])
-> sort ();
Siehe detailliertes Beispiel hier.
sortBy(column, order)
column
– Sie müssen den Spaltennamen übergeben, nach dem die Sortierung erfolgen soll.order
– Wenn Sie die Eigenschaft „order“ überspringen, werden die Daten standardmäßig aufsteigend sortiert. Sie müssen „desc“ als „order“ -Parameter übergeben, um die Daten in absteigender Reihenfolge zu sortieren. Außerdem können Sie im Parameter „order“ eine Vergleichsfunktion übergeben, um Ihre eigene Logik zum Sortieren der Daten zu definieren.Hinweis: Diese Methode sollte für Array of Objects verwendet werden. Wenn Sie ein einfaches Array sortieren möchten, sollten Sie die zuvor beschriebene Methode sort() verwenden.
Beispiel:
Nehmen wir an, Sie möchten die „Preis“ -Daten von „Produkten“ sortieren. Sie können es so machen:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> sortBy ( ' price ' , ' desc ' );
Siehe detailliertes Beispiel hier.
reset(data)
data
– können ein JSON-Dateipfad, eine JSON-Zeichenfolge oder ein JSON-Objekt sein. Wenn im data
keine Daten übergeben werden, wird die jsonQ
Objektinstanz auf zuvor initialisierte Daten zurückgesetzt.Möglicherweise möchten Sie die Objektinstanz jederzeit auf einen völlig anderen Datensatz zurücksetzen und diesen dann abfragen. In diesem Fall können Sie diese Methode verwenden.
Ein detailliertes Beispiel finden Sie hier.
copy()
Es wird ein vollständiger Klon der Objektinstanz zurückgegeben.
Ein detailliertes Beispiel finden Sie hier.
Wenn Sie auf Fehler oder Probleme stoßen, können Sie gerne ein Problem bei Github eröffnen.
Sie können mir auch eine E-Mail an mailto:[email protected] für Umarmungen oder Bugs schicken.
Dieses Paket unterstützt auch verschiedene Sprachen.
Hey Alter! Helfen Sie mir für ein paar!