Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 25/11/2023, à 11:53

lebossejames

python api reponse parsing json

Bonjour,

Je souhaiterais savoir si cela est possible de chercher chaque valeur pour chaque key sur un fichier .json quelque soit l'endroit où il se trouve sans connaitre l'emplacement par avance de la key:

listKeys=["id","name","adress","city"]
f=open('source.json')
json_data=json.load(f)

Merci d'avance.

Dernière modification par lebossejames (Le 25/11/2023, à 11:54)

Hors ligne

#2 Le 25/11/2023, à 13:44

Nuliel

Re : python api reponse parsing json

Bonjour,
json.load te retourne un dictionnaire. Donc tu peux faire ce que tu veux avec ce dico. Tu as l'air de parler d'ordre, c'est à partir de python 3.7 que les dictionnaires sont ordonnés.
Tu veux faire ça:

import json

some_json =  '{ "name":"John", "age":30, "city":"New York"}'

dico = json.loads(some_json)

for key, value in dico.items():
    print(key, value)
nuliel@nuliel-Latitude-E7270:~/heapLAB/HeapLAB$ python3 test_python.py 
name John
age 30
city New York

?
Si non, je veux bien que tu reprécises ta question.

Edit: sinon tu as d.values() pour lister toutes les valeurs, et d.keys() pour lister les clés

Dernière modification par Nuliel (Le 25/11/2023, à 13:55)

Hors ligne

#3 Le 25/11/2023, à 18:04

lebossejames

Re : python api reponse parsing json

J'ai essayé à partir d'un fichier

dico = json.loads(some_json)
for key, value in dico.items():
    print(key, value)

J'obtiens comme erreur "raise TypeError (f' the JSON object must be str,bytes or bytearray"


[
    {
        "orders": [
            {
                "size": "medium",
                "price": 15.67,
                "toppings": [
                    "mushrooms",
                    "pepperoni",
                    "basil"
                ],
                "extra_cheese": false,
                "delivery": true,
                "client": {
                    "name": "Jane Doe",
                    "phone": null,
                    "email": "janedoe@email.com"
                }
            },
            {
                "size": "small",
                "price": 6.54,
                "toppings": null,
                "extra_cheese": true,
                "delivery": false,
                "client": {
                    "name": "Foo Jones",
                    "phone": "556-342-452",
                    "email": null
                }
            }
        ]
    },
    {
        "orders": [
            {
                "size": "medium",
                "price": 15.67,
                "toppings": [
                    "mushrooms",
                    "pepperoni",
                    "basil"
                ],
                "extra_cheese": false,
                "delivery": true,
                "client": {
                    "name": "Jane Doe",
                    "phone": null,
                    "email": "janedoe@email.com"
                }
            },
            {
                "size": "small",
                "price": 6.54,
                "toppings": null,
                "extra_cheese": true,
                "delivery": false,
                "client": {
                    "name": "Foo Jones",
                    "phone": "556-342-452",
                    "email": null
                }
            }
        ]
    }
]

Dernière modification par lebossejames (Le 25/11/2023, à 18:35)

Hors ligne

#4 Le 26/11/2023, à 16:41

Nuliel

Re : python api reponse parsing json

Si tu mets ton json dans une variable, il faut mettre sous la forme

mavar = """
json
"""

Sinon, en reprenant ton fichier et en utilisant load:

import json

with open("ex_json.json", "r") as f:
    dico = json.load(f)

for i in range(len(dico)):
    for key, value in dico[i].items():
        print(key, value)

J'ai fait deux boucles imbriquées vu que tu as une liste de dictionnaires

Le résultat que j'ai:

orders [{'size': 'medium', 'price': 15.67, 'toppings': ['mushrooms', 'pepperoni', 'basil'], 'extra_cheese': False, 'delivery': True, 'client': {'name': 'Jane Doe', 'phone': None, 'email': 'janedoe@email.com'}}, {'size': 'small', 'price': 6.54, 'toppings': None, 'extra_cheese': True, 'delivery': False, 'client': {'name': 'Foo Jones', 'phone': '556-342-452', 'email': None}}]
orders [{'size': 'medium', 'price': 15.67, 'toppings': ['mushrooms', 'pepperoni', 'basil'], 'extra_cheese': False, 'delivery': True, 'client': {'name': 'Jane Doe', 'phone': None, 'email': 'janedoe@email.com'}}, {'size': 'small', 'price': 6.54, 'toppings': None, 'extra_cheese': True, 'delivery': False, 'client': {'name': 'Foo Jones', 'phone': '556-342-452', 'email': None}}]

Dernière modification par Nuliel (Le 26/11/2023, à 16:42)

Hors ligne