2016-03-08 3 views
3

Chaque fois que j'essaye d'analyser un json en OrderedDict, il finit dans un ordre différent de celui de json. J'essaie comme ceci:Json à OrderedDict en Python

from collections import OrderedDict  
data = OrderedDict(json.loads(resp.read().decode("utf-8")), object_pairs_hook=OrderedDict) 

que je fais quelque chose de mal, si oui, que puis-je faire pour y remédier, ou est-il pas possible en python?

J'ai vu des choses comme object_pairs_hook=collections.OrderedDict mais cela ne fonctionne même pas correctement. Il ne peut pas résoudre la référence.

Répondre

4

Vous avez l'argument mot-clé au mauvais endroit, ce qui peut être plus clair si l'on ajoute plus des espaces:

data = OrderedDict(
    json.loads(
     resp.read().decode("utf-8") # one argument to json.loads 
    ), 
    object_pairs_hook=OrderedDict # second argument to OrderedDict 
) 

OrderedDict prend pas cet argument - que vous vouliez passer à json.loads, vous n'avez pas besoin de recréer:

data = json.loads(
    resp.read().decode("utf-8"), 
    object_pairs_hook=OrderedDict 
) 

la raison pour laquelle vous ne voyez pas l'ordre que vous voulez, quand vous quittez le object_pairs_hook est que json.loads crée un dictionnaire de vanille, puis non ordonnéele convertir en un OrderedDict.

+0

Cela fonctionne, très bien :) Merci pour votre aide! –

+0

@FalingDutchman http://stackoverflow.com/help/someone-answers – jonrsharpe