2016-01-27 4 views
6

Wenn ich verwende requests Modul auf diese Weise des Pythons:Anfragen Modul Rückkehr json mit Artikel ungeordnetem

response = requests.get('http://[some_api_url]') print response.json() ich verschiedene json im Gegensatz zu bestellen, die json via Browser anzeigen.

Zum Beispiel:
Via response.json() erhalte ich:
[{"key2":"value2"},{"key1:"value1"}]

Während über den Browser ich es sehe, wie sein sollte: [{"key1:"value1"},{"key2":"value2"}]

EDIT: Beim Drucken response.text seines in der richtigen Reihenfolge Aber nicht json

+0

Können Sie bitte die URL posten? – SIslam

+0

Leider nicht, seine nicht öffentliche URL – JavaSa

+0

Der Aufruf gibt eine Python-Datenstruktur zurück, die Wörterbücher enthält. Wörterbücher sind in Python ungeordnet. –

Antwort

15

Sie können die object_pairs_hook a verwenden rgument des json Modul wie in der doc vorgeschlagen:

object_pairs_hook ist eine optionale Funktion, die mit dem Ergebnis eines Objekts aufgerufen wird, Literal mit einer geordneten Liste von Paaren decodiert. Der Rückgabewert von object_pairs_hook wird anstelle des dict verwendet. Diese Funktion kann zum Implementieren benutzerdefinierter Dekodierer verwendet werden, die auf der Reihenfolge basieren, in der die Schlüssel- und Wertpaare dekodiert werden (z. B. erinnert sich collections.OrderedDict() an die Reihenfolge der Einfügung). Wenn object_hook ebenfalls definiert ist, hat der object_pairs_hook Priorität.

import json 
from collections import OrderedDict 
result = json.loads(request.text, 
        object_pairs_hook=OrderedDict) 

Um einfacher, können Sie in der implementation of requests sehen, die kwargs vom json Verfahren zum json-Modul übergeben werden, damit das funktioniert auch:

d = response.json(object_pairs_hook=OrderedDict) 

und d wird eine sein OrderedDict mit der Reihenfolge response.text erhalten.

+4

Ich verifizierte den zweiten Ansatz mit 'd = response.json (object_pairs_hook = OrderedDict)' und es funktioniert super. –

+0

Bitte ändern object_parir_hook zu object_pairs_hook –

+0

Fertig, danke für die Nachricht! – stellasia

Verwandte Themen