JsonQ est un package PHP simple et élégant permettant d'interroger tout type de données JSON. Cela vous facilitera la vie en donnant la saveur d'une requête de type ORM sur votre JSON.
Hé, merci, aidez-moi s'il vous plaît pour améliorer quotidiennement ce projet
A partir de la version JsonQ 6.0, toutes les fonctionnalités sont réécrites depuis QAarray. Après une longue période, nous avons remarqué que le moteur de requête de JsonQ devait être séparé. Parce que les gens souhaitent interroger différents types de données comme CSV, YAML, XML. Donc, si nous maintenons le moteur de requête étroitement couplé à ce projet, cela n'a aucun sens. C'est pourquoi nous déplaçons la partie Query Engine et développons un nouveau package QAarray. Qarray est conçu pour effectuer des requêtes sur un tableau PHP natif et n'importe qui peut implémenter son propre moteur, comme JsonQ.
Veuillez ne pas mettre à jour vers la version >= 6.0 directement à partir de ci-dessous
composer require nahid/jsonq
Vous pouvez commencer à utiliser ce package immédiatement en important vos données JSON à partir d'un fichier :
use Nahid /JsonQ/Jsonq;
$ jsonq = new Jsonq ( ' data.json ' );
Ou à partir d'une chaîne JSON :
$ json -> json ( ' {"id": 1, "name": "Nahid"} ' );
Ou depuis un tableau PHP :
$ json -> collect ([ ' id ' => 1 , ' name ' => ' Nahid ' ]);
Vous pouvez commencer à interroger vos données en utilisant les différentes méthodes de requête telles que find , Where , orWhere , WhereIn , WhereStartsWith , WhereEndsWith , WhereContains et ainsi de suite. Vous pouvez également agréger vos données après requête en utilisant sum , count , groupBy , max , min etc.
Voyons un exemple rapide :
//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
}
]
*/
Disons que nous voulons obtenir la somme des prix du résultat interrogé. Nous pouvons le faire facilement en appelant la méthode sum() au lieu de get() :
$ result = $ json -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 2 )
-> sum ( ' price ' );
dump ( $ result );
//It will print:
/*
365000
*/
Plutôt sympa, hein ?
Explorons l'API complète pour voir quelle autre magie cette bibliothèque peut faire pour vous. Allons-nous?
Les exemples d'API suivants sont présentés sur la base des exemples de données JSON fournies ici. Pour avoir une meilleure idée des exemples, consultez d'abord les données JSON. Des exemples détaillés de chaque API peuvent également être trouvés ici.
Liste des API :
fetch()
Cette méthode exécutera des requêtes et renverra les données résultantes. Vous devez enfin l'appeler après avoir utilisé certaines méthodes de requête. Les détails peuvent être trouvés dans d’autres exemples d’API.
find(path)
path
-- la hiérarchie des chemins des données que vous souhaitez rechercher. Vous n’avez pas besoin d’appeler la méthode fetch()
après cela. Parce que cette méthode récupérera et renverra les données par elle-même.
mise en garde : vous ne pouvez pas enchaîner d'autres méthodes de requête après cela. Si vous en avez besoin, vous devez utiliser la méthode at()
ou from()
.
exemple:
Supposons que vous souhaitiez obtenir la valeur de la propriété « villes » de vos données Json. Vous pouvez procéder ainsi :
$ q = new Jsonq ( ' data.json ' );
echo $ q -> find ( ' vendor.name ' );
Si vous souhaitez approfondir la hiérarchie, vous pouvez le faire comme :
$ q = new Jsonq ( ' data.json ' );
echo $ q -> find ( ' vendor.name ' );
Voir un exemple détaillé ici.
from(path)
path
(facultatif) -- la hiérarchie des chemins des données à partir desquelles vous souhaitez lancer la requête. Par défaut, la requête serait lancée à partir de la racine des données JSON que vous avez fournies. Si vous souhaitez d'abord passer à une hiérarchie de chemins imbriqués des données à partir de laquelle vous souhaitez démarrer votre requête, vous utiliserez cette méthode. Ignorer le paramètre path
ou donner '.' en tant que paramètre lancera également la requête à partir des données racine.
La différence entre cette méthode et find()
est que la méthode find()
renverra les données de la hiérarchie de chemin donnée. D'un autre côté, cette méthode renverra l'instance Object, afin que vous puissiez enchaîner davantage les méthodes de requête après celle-ci.
exemple:
Supposons que vous souhaitiez lancer une requête sur les valeurs de la propriété « vendor.name » de vos données JSON. Vous pouvez procéder ainsi :
$ q = new Jsonq ( ' data.json ' );
echo $ q -> from ( ' vendor.name ' )-> get ();
Si vous souhaitez approfondir la hiérarchie, vous pouvez le faire comme :
$ q = new Jsonq ( ' data.json ' );
echo $ q -> from ( ' users.5.visits ' )-> get ();
Voir un exemple détaillé ici.
at(path)
Il s'agit d'une méthode alias de from()
et se comportera exactement comme ça. Voir exemple ici.
where(key, condition, val)
key
-- le nom de la propriété des données. Ou vous pouvez transmettre une fonction ici pour regrouper plusieurs requêtes à l'intérieur. Voir les détails dans l'exemple
val
-- valeur à laquelle faire correspondre. Il peut s'agir d'un int , d'une string , d'un bool ou même d' une Function - selon l' op
.
op
-- opérande à utiliser pour la correspondance. Les opérandes suivants peuvent être utilisés :
=
: Pour une correspondance d'égalité faibleeq
: Identique à =
!=
: Pour une correspondance faible et non égaleneq
: Identique à !=
==
: Pour une correspondance d'égalité stricteseq
: Identique à ==
!==
: Pour une correspondance stricte et sans égalitésneq
: Identique à !==
>
: Vérifiez si la valeur de la clé donnée dans les données est supérieure à valgt
: Identique à >
<
: Vérifiez si la valeur de la clé donnée dans les données est inférieure à vallt
: Identique à <
>=
: Vérifiez si la valeur de la clé donnée dans les données est supérieure ou égale à valgte
: Identique à >=
<=
: Vérifiez si la valeur de la clé donnée dans les données est inférieure ou égale à vallte
: Identique à <=
null
: Vérifiez si la valeur de la clé donnée dans data est nulle (le paramètre val
dans where()
peut être omis pour cette op
)notnull
: Vérifiez si la valeur de la clé donnée dans data n'est pas nulle (le paramètre val
dans where()
peut être omis pour cette op
)in
: Vérifiez si la valeur de la clé donnée dans data existe dans le val donné. val devrait être un simple Array .notin
: Vérifiez si la valeur de la clé donnée dans data n'existe pas dans le val donné. val devrait être un simple Array .startswith
: Vérifiez si la valeur de la clé donnée dans data commence par (a un préfixe de) le val donné. Cela ne fonctionnerait que pour les données de type String .endswith
: Vérifiez si la valeur de la clé donnée dans data se termine par (a un suffixe de) le val donné. Cela ne fonctionnerait que pour les données de type String .contains
: Vérifiez si la valeur de la clé donnée dans data a une sous-chaîne de val donnée. Cela ne fonctionnerait que pour les données de type String .match
: Vérifiez si la valeur de la clé donnée dans data a une correspondance d'expression régulière avec la val donnée. Le paramètre val
doit être une RegExp pour cette op
.macro
: elle essaierait de faire correspondre la valeur de la clé donnée dans les données exécutant la val
donnée. Le paramètre val
doit être une fonction pour cette op
. Cette fonction doit avoir une logique correspondante à l'intérieur et renvoyer vrai ou faux en fonction de cela.exemple:
Disons que vous souhaitez rechercher les « utilisateurs » dont id
est 1
. Vous pouvez procéder ainsi :
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' users ' )-> where ( ' id ' , ' = ' , 1 )-> get ();
Vous pouvez ajouter plusieurs conditions Where . Cela donnera le résultat en effectuant une opération AND entre ces multiples conditions Where.
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' users ' )
-> where ( ' id ' , ' = ' , 1 )
-> where ( ' location ' , ' = ' , ' barisal ' )
-> get ();
Voir un exemple détaillé ici.
orWhere(key, op, val)
Les paramètres de orWhere()
sont les mêmes que where()
. La seule différence entre where()
et orWhere()
est la suivante : la condition donnée par la méthode orWhere()
appliquera un OU au résultat avec d'autres conditions.
Par exemple, si vous souhaitez rechercher les utilisateurs dont l'identifiant est 1
ou 2
, vous pouvez procéder comme ceci :
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' users ' )
-> where ( ' id ' , ' = ' , 1 )
-> orWhere ( ' id ' , ' = ' , 2 )
-> get ();
Voir un exemple détaillé ici.
whereIn(key, val)
key
-- le nom de la propriété des donnéesval
-- ça devrait être un tableau Cette méthode se comportera comme un appel de méthode where(key, 'in', val)
.
whereNotIn(key, val)
key
-- le nom de la propriété des donnéesval
-- ça devrait être un tableau Cette méthode se comportera comme un appel de méthode where(key, 'notin', val)
.
whereNull(key)
key
-- le nom de la propriété des données Cette méthode se comportera comme un appel de méthode where(key, 'null')
ou where(key, '=', null)
.
whereNotNull(key)
key
-- le nom de la propriété des données Cette méthode se comportera comme un appel de méthode where(key, 'notnull')
ou where(key, '!=', null)
.
whereStartsWith(key, val)
key
-- le nom de la propriété des donnéesval
-- ça devrait être une chaîne Cette méthode se comportera comme un appel de méthode where(key, 'startswith', val)
.
whereEndsWith(key, val)
key
-- le nom de la propriété des donnéesval
-- ça devrait être une chaîne Cette méthode se comportera comme un appel de méthode where(key, 'endswith', val)
.
whereContains(key, val)
key
-- le nom de la propriété des donnéesval
-- ça devrait être une chaîne Cette méthode se comportera comme un appel de méthode where(key, 'contains', val)
.
sum(column)
column
-- le nom de la propriété des donnéesexemple:
Disons que vous voulez trouver la somme des « prix » des « produits » . Vous pouvez procéder ainsi :
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> sum ( ' price ' );
Si les données que vous agrégez sont un tableau simple, vous n'avez pas besoin de transmettre le paramètre « colonne ». Voir l'exemple détaillé ici
count()
Il renverra le nombre d'éléments dans la collection.
exemple:
Supposons que vous souhaitiez connaître le nombre d'éléments contenus dans la propriété « produits » . Vous pouvez le faire comme :
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> count ();
Voir un exemple détaillé ici.
size()
Il s'agit d'une méthode alias de count()
.
max(column)
column
-- le nom de la propriété des donnéesexemple:
Disons que vous souhaitez trouver le maximum du « prix » des « produits » . Vous pouvez procéder ainsi :
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
->max('price);
Si les données que vous interrogez sont un tableau simple, vous n'avez pas besoin de transmettre le paramètre « colonne ». Voir l'exemple détaillé ici
min(column)
column
-- le nom de la propriété des donnéesexemple:
Disons que vous souhaitez trouver le minimum du « prix » des « produits » . Vous pouvez procéder ainsi :
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> min ( ' price ' );
Si les données que vous interrogez sont un tableau simple, vous n'avez pas besoin de transmettre le paramètre « propriété ». Voir l'exemple détaillé ici
avg(column)
column
-- le nom de la propriété des donnéesexemple:
Disons que vous souhaitez trouver la moyenne des « prix » des « produits » . Vous pouvez procéder ainsi :
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> avg ( ' price ' );
Si les données que vous interrogez sont un tableau simple, vous n'avez pas besoin de transmettre le paramètre « colonne ». Voir l'exemple détaillé ici
first()
Il renverra le premier élément de la collection.
exemple:
$ q = new jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> first ();
Voir un exemple détaillé ici.
last()
Il renverra le dernier élément de la collection.
exemple:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> last ();
Voir un exemple détaillé ici.
nth(index)
index
-- index de l'élément à renvoyer.Il renverra le nième élément de la collection. Si l'index donné est une valeur positive , il renverra le nième élément depuis le début. Si l'index donné est une valeur négative , il renverra le nième élément à partir de la fin.
exemple:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> nth ( 2 );
Voir un exemple détaillé ici.
exists()
Il renverra true si l'élément n'est pas vide ou nul ou s'il ne s'agit pas d'un tableau vide ou d'un objet vide .
exemple:
Supposons que vous souhaitiez connaître le nombre d'éléments contenus dans la propriété « produits » . Vous pouvez le faire comme :
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> exists ();
Voir un exemple détaillé ici.
groupBy(column)
column
-- Propriété selon laquelle vous souhaitez regrouper la collection.exemple:
Supposons que vous souhaitiez regrouper les données « utilisateurs » en fonction de la propriété « emplacement » . Vous pouvez le faire comme :
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' users ' )
-> groupBy ( ' location ' )
-> get ();
Voir un exemple détaillé ici.
sort(order)
order
-- Si vous ignorez la propriété 'order', les données seront par défaut classées par ordre croissant . Vous devez passer « desc » comme paramètre « order » pour trier les données par ordre décroissant . En outre, vous pouvez transmettre une fonction de comparaison dans le paramètre « ordre » pour définir votre propre logique pour ordonner les données.Remarque : Cette méthode doit être utilisée pour un tableau simple. Si vous souhaitez trier un tableau d'objets, vous devez utiliser la méthode sortBy() décrite plus loin.
exemple:
Disons que vous souhaitez trier les données « arr » . Vous pouvez le faire comme :
$ q = new Jsonq ();
$ res = $ q -> collect ([ 7 , 5 , 9 , 1 , 3 ])
-> sort ();
Voir un exemple détaillé ici.
sortBy(column, order)
column
-- Vous devez transmettre le nom de la colonne sur laquelle le tri sera effectué.order
-- Si vous ignorez la propriété 'order', les données seront par défaut classées par ordre croissant . Vous devez passer « desc » comme paramètre « order » pour trier les données par ordre décroissant . En outre, vous pouvez transmettre une fonction de comparaison dans le paramètre « ordre » pour définir votre propre logique pour ordonner les données.Remarque : Cette méthode doit être utilisée pour un tableau d'objets. Si vous souhaitez trier un tableau simple, vous devez utiliser la méthode sort() décrite précédemment.
exemple:
Supposons que vous souhaitiez trier les données « prix » des « produits » . Vous pouvez le faire comme :
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> sortBy ( ' price ' , ' desc ' );
Voir un exemple détaillé ici.
reset(data)
data
-- peut être un chemin de fichier JSON, une chaîne JSON ou un objet JSON. Si aucune donnée n'est transmise dans le paramètre data
, l'instance d'objet jsonQ
sera réinitialisée aux données précédemment initialisées.À tout moment, vous souhaiterez peut-être réinitialiser l'instance d'Object avec un ensemble de données complètement différent, puis effectuer une requête dessus. Vous pouvez utiliser cette méthode dans ce cas.
Voir un exemple détaillé ici.
copy()
Il renverra un clone complet de l’instance Object.
Voir un exemple détaillé ici.
Si vous rencontrez des bugs ou des problèmes, n'hésitez pas à ouvrir un ticket sur github.
Vous pouvez également m'envoyer un e-mail à mailto:[email protected] pour des câlins ou des bugs.
Ce package prend également en charge différentes langues.
Hé mec ! Aide-moi pour quelques-uns !