LexQL est un interpréteur SQL personnalisé qui permet d'effectuer des requêtes de type SQL sur des fichiers JSON. Il offre une syntaxe familière pour interroger et analyser des données JSON de manière simple et efficace, avec une interface web intégrée pour une utilisation plus conviviale.
- Interface web interactive pour exécuter des requêtes
- Requêtes
SELECTavec support des champs imbriqués - Filtrage avec
WHEREet opérateurs de comparaison (==,>,<,>=,<=,!=) - Support des opérations logiques
ANDetOR - Opérateur
INpour la recherche dans les listes - Fonctions d'agrégation :
COUNT,AVG,SUM,MIN,MAX - Support des chemins imbriqués avec la notation point (.)
- Support des requêtes multiples (séparées par des points-virgules)
- Visualisation des résultats en format JSON
- Clonez le dépôt :
git clone [url-du-repo]
cd nova-lexql- Créez un environnement virtuel et activez-le :
python -m venv venv
# Sur Windows
venv\Scripts\activate
# Sur Unix/MacOS
source venv/bin/activate- Installez les dépendances :
pip install -r requirements.txt- Lancez le serveur web :
python app.py- Ouvrez votre navigateur à l'adresse
http://localhost:5000 - Utilisez l'interface web pour :
- Écrire et exécuter des requêtes
- Visualiser les résultats en format JSON
- Explorer vos données
Pour exécuter des requêtes LexQL en ligne de commande :
python lexql.py <fichier.lql> <fichier.json>- Sélection simple avec condition :
SELECT name, details
FROM users
WHERE city == "Paris";- Utilisation de l'opérateur IN avec des champs imbriqués :
SELECT name, details.skills
FROM users
WHERE "Python" IN details.skills;- Requêtes d'agrégation :
-- Comptage avec condition
COUNT FROM users WHERE salary > 45000;
-- Moyenne des salaires
AVG salary FROM users;
-- Montant minimum des commandes
MIN amount FROM orders;
-- Montant maximum des commandes
MAX amount FROM orders;
-- Somme des montants
SUM amount FROM orders;- Requêtes multiples :
SELECT * FROM users WHERE age > 30;
COUNT FROM users WHERE city == "Paris";Le fichier JSON doit être structuré comme un objet contenant des collections. Exemple :
{
"users": [
{
"id": 1,
"name": "Alice",
"details": {
"skills": ["Python", "SQL"],
"city": "Paris",
"salary": 50000
}
}
],
"orders": [
{
"id": 1,
"user_id": 1,
"amount": 150.5,
"date": "2024-03-20"
}
]
}- Champs multiples :
field1, field2 - Champs imbriqués :
details.department - Sélection complète :
*
- Opérateurs de comparaison :
- Égalité :
== - Supérieur :
> - Inférieur :
< - Supérieur ou égal :
>= - Inférieur ou égal :
<= - Différent :
!=
- Égalité :
- Opérateurs logiques :
AND: toutes les conditions doivent être vraiesOR: au moins une condition doit être vraie
- Opérateur
IN: vérification d'appartenance à une liste
COUNT: nombre d'élémentsAVG: moyenne arithmétiqueSUM: somme des valeursMIN: valeur minimaleMAX: valeur maximale
- Les requêtes doivent se terminer par un point-virgule (;)
- Pas de support pour les jointures entre collections
- Pas de support pour les sous-requêtes
- Pas de support pour GROUP BY et ORDER BY
- Les valeurs numériques dans les conditions doivent être sans guillemets
- Les chaînes de caractères dans les conditions doivent être entre guillemets doubles
Le fichier de données par défaut doit être placé dans data/data.json. Pour utiliser un autre fichier :
- En ligne de commande : spécifiez le chemin en argument
- Via l'interface web : utilisez l'API
/api/datapour visualiser les données chargées