Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

json.loads retourne une liste

+2 votes
def mods(VERSION):
    """
    Returns a list of mods on the selected [VERSION].
    [ALL] is an acceptable request for [VERSION].
    """

    d = urllib2.urlopen(entrypoint(str(VERSION)) + '.json')
    e = json.loads(d.read())
    return e

Lorsque je fais un type(module.mods(VERSION)) je me mange un:

<type 'list'>

Une idée comment json.loads peut return une liste et non un dict alors que le fichier json est valable?

demandé 25-Jan-2015 par barnumbirr (2,750 points)
edité 25-Jan-2015 par Sam

File nous le fichier JSON, quitte à remplacer le mot que tu veux pas qu'on voit par des fjdqfhdjklsqfhdklsqhfqsjk histoire de bien comprendre le problème.

Le fichier .json:
http://paste.calypso.pm/3yqLgt

1 Réponse

+4 votes
 
Meilleure réponse

Là tu charges tout le fichier JSON, et tu le transformes en objets Python. Tu ne vas pas rechercher une clé dans le fichier JSON.

Le fichier JSON commence par :

[
    {

Donc il contient un array Javascript qui, lui-même, contient une série d'objets. Le parseur JSON Python transforme ça en le type le plus proche : une liste de dictionnaires.

D'ailleurs, le commentaire de la docstring le dit bien :

"""
Returns a list of mods on the selected [VERSION].
[ALL] is an acceptable request for [VERSION].
"""

Retourne un LISTE de mods. Donc ce qui est retourné, est une liste de mods, chaque mod étant représenté par un dictionnaire. Logique :)

Si tu veux un mod, et donc un seul dico :

premier_mod = json.loads(d.read())[0]
répondu 25-Jan-2015 par Sam (4,984 points)
sélectionné 25-Jan-2015 par barnumbirr

La doctring dit aussi:

Data request is sent in minified JSON.

Peut-être ça qui m'a confus. Il y a-t-il un moyen "simple" de faire un dict à partir de cette liste?

Peut être, mais il va falloir que tu ouvres une autre question histoire de pas mélanger les choux et les carottes.

...