Exemples de JSONPath en Python
Qu'est-ce que JSONPath ?
JSONPath est un langage d'expression pour analyser des données JSON. Il est très similaire au langage d'expression XPath pour analyser des données XML. L'idée est d'analyser les données JSON et d'obtenir la valeur que vous souhaitez. Cela est plus efficace en mémoire car nous n'avons pas besoin de lire l'intégralité des données JSON.
Bibliothèques JSONPath pour Python
Il existe de nombreuses bibliothèques JSONPath en Python.
- C'est un port des versions Perl et JavaScript de JSONPath.
- jsonpath-rw : L'implémentation Python complète des expressions JSONPath. Les expressions JSONPath sont des objets de première classe, faciles à analyser, transformer, parser, imprimer et étendre. Le module jsonpath-rw-ext fournit des extensions supplémentaires pour étendre ses fonctionnalités.
- jsonpath-ng : L'implémentation finale de JSONPath qui vise à être conforme à la norme, incluant des opérateurs de comparaison arithmétique et binaire. Cette bibliothèque fusionne les modules jsonpath-rw et jsonpath-rw-ext et les améliore davantage.
Quelle bibliothèque JSONPath utiliser en Python ?
Le module jsonpath-ng est le plus complet et écrit uniquement en Python. Il prend en charge à la fois Python 2 et Python 3. Donc, nous utiliserons ce module pour des exemples JSONPath en Python.
Installation du module jsonpath-ng
Nous pouvons installer le module jsonpath-ng en utilisant PIP.
pip3.7 install jsonpath-ng
Analyse d'une simple donnée JSON à l'aide de JSONPath
Examinons un exemple simple pour analyser les données JSON et obtenir la valeur de l'attribut requis.
import json
from jsonpath_ng import jsonpath, parse
json_string = '{"id":1, "name":"Pankaj"}'
json_data = json.loads(json_string)
jsonpath_expression = parse('$.id')
match = jsonpath_expression.find(json_data)
print(match)
print("id value is", match[0].value)
Sortie:
[DatumInContext(value=1, path=Fields('id'), context=DatumInContext(value={'id': 1, 'name': 'Pankaj'}, path=Root(), context=None))]
id value is 1
Nous utilisons le module json pour convertir la chaîne JSON en un dictionnaire.
Analyse d'une liste en utilisant une expression JSONPath
La clé JSON peut contenir une liste de valeurs. Nous pouvons utiliser une expression JSONPath pour analyser la liste et obtenir la liste des valeurs. Supposons que nous ayons un fichier JSON "db.json" avec le contenu suivant.
{
"employees": [
{
"id": 1,
"name": "Pankaj",
"salary": "10000"
},
{
"name": "David",
"salary": "5000",
"id": 2
}
]
}
Nous voulons analyser ce fichier JSON et obtenir la liste des identifiants des employés. Nous pouvons utiliser des expressions JSONPath pour obtenir ces données très facilement.
import json
from jsonpath_ng import jsonpath, parse
with open("db.json", 'r') as json_file:
json_data = json.load(json_file)
print(json_data)
jsonpath_expression = parse('employees[*].id')
for match in jsonpath_expression.find(json_data):
print(f'Employee id: {match.value}')
Sortie :
{'employees': [{'id': 1, 'name': 'Pankaj', 'salary': '10000'}, {'name': 'David', 'salary': '5000', 'id': 2}]}
Employee id: 1
Employee id: 2
Lecture recommandée : f-strings Python – PEP 498 – Interpolation de chaînes littérales
Si vous souhaitez mettre les données dans une liste, vous pouvez utiliser la compréhension de liste en Python.
emp_ids_list = [match.value for match in jsonpath_expression.find(json_data)]
print(emp_ids_list) # [1, 2]
Conclusion
JSONPath nous fournit un moyen facile d'analyser les données JSON et d'extraire des valeurs spécifiques. C'est très utile lorsque les données JSON sont énormes et que nous ne sommes intéressés qu'à quelques-unes des valeurs.
Références
- jsonpath.com : pour tester la validité de l'expression JSONPath
- jsonlint.com : pour valider les données JSON

