JsonQ es un paquete PHP simple y elegante para realizar consultas sobre cualquier tipo de datos JSON. Le hará la vida más fácil al brindarle la apariencia de una consulta tipo ORM en su JSON.
Hola, por favor ayúdame a mejorar diariamente este proyecto.
A partir de la versión JsonQ 6.0 todas las funciones se reescriben desde QAarray. Después de un largo recorrido, notamos que Query Engine de JsonQ debería estar separado. Porque la gente quiere consultar varios tipos de datos como CSV, YAML, XML. Entonces, si mantenemos el motor de consultas estrechamente acoplado con este proyecto, no tiene sentido. Es por eso que trasladamos la parte del Query Engine y desarrollamos un nuevo paquete QAarray. Qarray está diseñado para realizar consultas sobre una matriz PHP nativa y cualquiera puede implementar su propio motor, como JsonQ.
No actualice a la versión >= 6.0 directamente desde abajo
composer require nahid/jsonq
Puede comenzar a usar este paquete de inmediato importando sus datos JSON desde un archivo:
use Nahid /JsonQ/Jsonq;
$ jsonq = new Jsonq ( ' data.json ' );
O desde una cadena JSON:
$ json -> json ( ' {"id": 1, "name": "Nahid"} ' );
O desde una matriz PHP:
$ json -> collect ([ ' id ' => 1 , ' name ' => ' Nahid ' ]);
Puede comenzar a consultar sus datos utilizando diversos métodos de consulta, como buscar , dónde o dónde , dónde comienza , dónde comienza con , dónde termina con , dónde contiene , etc. También puede agregar sus datos después de la consulta usando sum , count , groupBy , max , min , etc.
Veamos un ejemplo rápido:
//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
}
]
*/
Digamos que queremos obtener la suma del precio del resultado consultado. Podemos hacerlo fácilmente llamando al método sum() en lugar de get() :
$ result = $ json -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 2 )
-> sum ( ' price ' );
dump ( $ result );
//It will print:
/*
365000
*/
Bastante bonito, ¿eh?
Exploremos la API completa para ver qué más magia puede hacer esta biblioteca por usted. ¿Debemos?
Los siguientes ejemplos de API se muestran basados en los datos JSON de muestra que se proporcionan aquí. Para tener una mejor idea de los ejemplos, consulte primero los datos JSON. También se pueden encontrar ejemplos detallados de cada API aquí.
Lista de API:
fetch()
Este método ejecutará consultas y devolverá los datos resultantes. Debes llamarlo finalmente después de usar algunos métodos de consulta. Los detalles se pueden encontrar en otros ejemplos de API.
find(path)
path
: la jerarquía de rutas de los datos que desea encontrar. No es necesario llamar al método fetch()
después de esto. Porque este método buscará y devolverá los datos por sí solo.
Advertencia: no puede encadenar más métodos de consulta después de él. Si necesita eso, debe usar el método at()
o from()
.
ejemplo:
Supongamos que desea obtener el valor de la propiedad 'ciudades' de sus datos Json. Puedes hacerlo así:
$ q = new Jsonq ( ' data.json ' );
echo $ q -> find ( ' vendor.name ' );
Si desea recorrer una jerarquía más profunda, puede hacerlo de la siguiente manera:
$ q = new Jsonq ( ' data.json ' );
echo $ q -> find ( ' vendor.name ' );
Vea un ejemplo detallado aquí.
from(path)
path
(opcional): la jerarquía de rutas de los datos desde donde desea iniciar la consulta. De forma predeterminada, la consulta se iniciará desde la raíz de los datos JSON que proporcionó. Si desea pasar primero a una jerarquía de rutas anidadas de los datos desde donde desea iniciar su consulta, deberá utilizar este método. Saltarse el parámetro path
o dar '.' como parámetro también iniciará la consulta desde los datos raíz.
La diferencia entre este método y find()
es que el método find()
devolverá los datos de la jerarquía de rutas dada. Por otro lado, este método devolverá la instancia del Objeto, de modo que pueda encadenar más métodos de consulta después de ella.
ejemplo:
Supongamos que desea iniciar una consulta sobre los valores de la propiedad 'vendor.name' de sus datos JSON. Puedes hacerlo así:
$ q = new Jsonq ( ' data.json ' );
echo $ q -> from ( ' vendor.name ' )-> get ();
Si desea recorrer una jerarquía más profunda, puede hacerlo de la siguiente manera:
$ q = new Jsonq ( ' data.json ' );
echo $ q -> from ( ' users.5.visits ' )-> get ();
Vea un ejemplo detallado aquí.
at(path)
Este es un método de alias de from()
y se comportará exactamente así. Vea el ejemplo aquí.
where(key, condition, val)
key
: el nombre de propiedad de los datos. O puede pasar una función aquí para agrupar varias consultas dentro de ella. Ver detalles en ejemplo
val
: valor que se va a comparar. Puede ser int , string , bool o incluso Function , dependiendo de la op
.
op
: operando que se utilizará para hacer coincidir. Los siguientes operandos están disponibles para su uso:
=
: Para emparejamiento de igualdad débileq
: Igual que =
!=
: Para coincidencias débiles que no son igualesneq
: Igual que !=
==
: Para una coincidencia de igualdad estrictaseq
: Igual que ==
!==
: Para una coincidencia estricta sin igualdadsneq
: Igual que !==
>
: Compruebe si el valor de la clave dada en los datos es mayor que valgt
: Igual que >
<
: Compruebe si el valor de la clave dada en los datos es menor que vallt
: Igual que <
>=
: compruebe si el valor de la clave dada en los datos es mayor o igual que valgte
: Igual que >=
<=
: compruebe si el valor de la clave dada en los datos es menor o igual que vallte
: Igual que <=
null
: compruebe si el valor de la clave dada en los datos es nulo (el parámetro val
en where()
se puede omitir para esta op
)notnull
: comprueba si el valor de la clave dada en los datos no es nulo (el parámetro val
en where()
se puede omitir para esta op
)in
: compruebe si el valor de la clave dada en los datos existe en el valor dado. val debería ser un Array simple.notin
: compruebe si el valor de la clave dada en los datos no existe en el valor dado. val debería ser un Array simple.startswith
: compruebe si el valor de la clave dada en los datos comienza con (tiene un prefijo de) el valor dado. Esto solo funcionaría para datos de tipo Cadena .endswith
: compruebe si el valor de la clave dada en los datos termina con (tiene un sufijo de) el valor dado. Esto solo funcionaría para datos de tipo Cadena .contains
: compruebe si el valor de la clave dada en los datos tiene una subcadena del valor dado. Esto solo funcionaría para datos de tipo Cadena .match
: compruebe si el valor de la clave dada en los datos tiene una coincidencia de expresión regular con el valor dado. El parámetro val
debe ser una expresión regular para esta op
.macro
: Intentaría hacer coincidir el valor de la clave dada en los datos que ejecutan el val
dado. El parámetro val
debe ser una función para esta op
. Esta función debe tener una lógica coincidente dentro y devolver verdadero o falso en función de eso.ejemplo:
Digamos que desea encontrar los 'usuarios' que tienen id
de 1
. Puedes hacerlo así:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' users ' )-> where ( ' id ' , ' = ' , 1 )-> get ();
Puede agregar varias condiciones donde . Dará el resultado haciendo AND entre estas múltiples condiciones donde.
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' users ' )
-> where ( ' id ' , ' = ' , 1 )
-> where ( ' location ' , ' = ' , ' barisal ' )
-> get ();
Vea un ejemplo detallado aquí.
orWhere(key, op, val)
Los parámetros de orWhere()
son los mismos que where()
. La única diferencia entre where()
y orWhere()
es: la condición dada por el método orWhere()
combinará OR el resultado con otras condiciones.
Por ejemplo, si desea encontrar usuarios con ID de 1
o 2
, puede hacerlo así:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' users ' )
-> where ( ' id ' , ' = ' , 1 )
-> orWhere ( ' id ' , ' = ' , 2 )
-> get ();
Vea el ejemplo detallado aquí.
whereIn(key, val)
key
: el nombre de la propiedad de los datosval
: debería ser una matriz Este método se comportará como la llamada al método where(key, 'in', val)
.
whereNotIn(key, val)
key
: el nombre de la propiedad de los datosval
: debería ser una matriz Este método se comportará como la llamada al método where(key, 'notin', val)
.
whereNull(key)
key
: el nombre de la propiedad de los datos Este método se comportará como la llamada al método where(key, 'null')
o where(key, '=', null)
.
whereNotNull(key)
key
: el nombre de la propiedad de los datos Este método se comportará como la llamada al método where(key, 'notnull')
o where(key, '!=', null)
.
whereStartsWith(key, val)
key
: el nombre de la propiedad de los datosval
: debería ser una cadena Este método se comportará como la llamada al método where(key, 'startswith', val)
.
whereEndsWith(key, val)
key
: el nombre de la propiedad de los datosval
: debería ser una cadena Este método se comportará como la llamada al método where(key, 'endswith', val)
.
whereContains(key, val)
key
: el nombre de la propiedad de los datosval
: debería ser una cadena Este método se comportará como la llamada al método where(key, 'contains', val)
.
sum(column)
column
: el nombre de la propiedad de los datosejemplo:
Digamos que desea encontrar la suma del "precio" de los "productos" . Puedes hacerlo así:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> sum ( ' price ' );
Si los datos que está agregando son una matriz simple, no necesita pasar el parámetro "columna". Ver ejemplo detallado aquí
count()
Devolverá la cantidad de elementos de la colección.
ejemplo:
Digamos que desea encontrar cuántos elementos hay en la propiedad 'productos' . Puedes hacerlo como:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> count ();
Vea el ejemplo detallado aquí.
size()
Este es un método de alias de count()
.
max(column)
column
: el nombre de la propiedad de los datosejemplo:
Digamos que desea encontrar el máximo del 'precio' de los 'productos' . Puedes hacerlo así:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
->max('price);
Si los datos que está consultando son una matriz simple, no necesita pasar el parámetro 'columna'. Ver ejemplo detallado aquí
min(column)
column
: el nombre de la propiedad de los datosejemplo:
Digamos que quieres encontrar el mínimo del 'precio' de los 'productos' . Puedes hacerlo así:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> min ( ' price ' );
Si los datos que está consultando son una matriz simple, no necesita pasar el parámetro 'propiedad'. Ver ejemplo detallado aquí
avg(column)
column
: el nombre de la propiedad de los datosejemplo:
Digamos que desea encontrar el promedio del "precio" de los "productos" . Puedes hacerlo así:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> avg ( ' price ' );
Si los datos que está consultando son una matriz simple, no necesita pasar el parámetro 'columna'. Ver ejemplo detallado aquí
first()
Devolverá el primer elemento de la colección.
ejemplo:
$ q = new jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> first ();
Vea el ejemplo detallado aquí.
last()
Devolverá el último elemento de la colección.
ejemplo:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> last ();
Vea el ejemplo detallado aquí.
nth(index)
index
: índice del elemento que se va a devolver.Devolverá el enésimo elemento de la colección. Si el índice dado es un valor positivo , devolverá el enésimo elemento desde el principio. Si el índice dado es un valor negativo , devolverá el enésimo elemento desde el final.
ejemplo:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> nth ( 2 );
Vea el ejemplo detallado aquí.
exists()
Devolverá verdadero si el elemento no está vacío o no es nulo o no es una matriz vacía o no es un objeto vacío .
ejemplo:
Digamos que desea encontrar cuántos elementos hay en la propiedad 'productos' . Puedes hacerlo como:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> exists ();
Vea el ejemplo detallado aquí.
groupBy(column)
column
: la propiedad por la que desea agrupar la colección.ejemplo:
Supongamos que desea agrupar los datos de los 'usuarios' según la propiedad 'ubicación' . Puedes hacerlo como:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' users ' )
-> groupBy ( ' location ' )
-> get ();
Vea el ejemplo detallado aquí.
sort(order)
order
: si omite la propiedad 'orden', los datos se ordenarán de forma ascendente de forma predeterminada. Debe pasar 'desc' como parámetro 'orden' para ordenar los datos en orden descendente . Además, puede pasar una función de comparación en el parámetro 'orden' para definir su propia lógica para ordenar los datos.Nota: Este método debe usarse para Array simple. Si desea ordenar una matriz de objetos, debe utilizar el método sortBy() que se describe más adelante.
ejemplo:
Digamos que desea ordenar los datos 'arr' . Puedes hacerlo como:
$ q = new Jsonq ();
$ res = $ q -> collect ([ 7 , 5 , 9 , 1 , 3 ])
-> sort ();
Vea el ejemplo detallado aquí.
sortBy(column, order)
column
: debe pasar el nombre de la columna en la que se realizará la clasificación.order
: si omite la propiedad 'orden', los datos se ordenarán de forma ascendente de forma predeterminada. Debe pasar 'desc' como parámetro 'orden' para ordenar los datos en orden descendente . Además, puede pasar una función de comparación en el parámetro 'orden' para definir su propia lógica para ordenar los datos.Nota: Este método debe usarse para una matriz de objetos. Si desea ordenar una matriz simple, debe usar el método sort() descrito anteriormente.
ejemplo:
Supongamos que desea ordenar los datos de "precio" de los "productos" . Puedes hacerlo como:
$ q = new Jsonq ( ' data.json ' );
$ res = $ q -> from ( ' products ' )
-> where ( ' cat ' , ' = ' , 1 )
-> sortBy ( ' price ' , ' desc ' );
Vea el ejemplo detallado aquí.
reset(data)
data
: puede ser una ruta de archivo JSON, una cadena JSON o un objeto JSON. Si no se pasan datos en el parámetro data
, la instancia del objeto jsonQ
se restablecerá a los datos previamente inicializados.En cualquier momento, es posible que desee restablecer la instancia del Objeto a un conjunto de datos completamente diferente y luego consultarlo. Puede utilizar este método en ese caso.
Vea un ejemplo detallado aquí.
copy()
Devolverá un clon completo de la instancia del Objeto.
Vea un ejemplo detallado aquí.
Si encuentra algún error o problema, no dude en abrir un problema en github.
Además, puedes enviarme un correo electrónico a mailto:[email protected] para recibir abrazos o errores.
Este paquete también admite diferentes idiomas.
¡Oye amigo! ¡Ayúdame por un par de!