2016-03-24 4 views
0

Ich versuche, ein Antwortobjekt zu behandeln, das von BitBuckets API in Python zurückgegeben wird. Ich habe den folgenden Code, um zu versuchen und zu handhaben die Antwort:Behandeln eines mehrdimensionalen Antwortobjekts aus der REST-API im Python-Wörterbuch

import requests 
import json 

url = 'http:www.sampleurl.com' 
myResponse = requests.get(url,auth=("myusername","mypassword")) 

jd = myResponse.json() 
print(jd.keys()) 

Und die Schlüssel kommen vollkommen zurück. Innerhalb eines bestimmten Schlüssels wird jedoch eine Liste zurückgegeben. Ich bin an den Werten interessiert, die in dieser Liste enthalten sind. Konkret geht es mir um die Werte innerhalb von "Werten". Gibt es eine Möglichkeit, die in den Werten enthaltenen Informationen zu analysieren, bevor/nachdem eine Liste erstellt wird?

Mein Problem läuft auf die Tatsache hinaus, dass ich Probleme mit dem Zugriff auf Informationen innerhalb der JSON Array 'Eltern' innerhalb der folgenden Beispielantwort habe.

{ 
    "pagelen": 30, 
    "values": [ 
    { 
     hash: "61d9e64348f9da407e62f64726337fd3bb24b466", 
     links: { 
      self: { 
       href: "https://api.bitbucket.org/2.0/repositories/atlassian/atlassian-rest/commit/61d9e64348f9da407e62f64726337fd3bb24b466" 
      }, 
      comments: { 
       href: "https://api.bitbucket.org/2.0/repositories/atlassian/atlassian-rest/commit/61d9e64348f9da407e62f64726337fd3bb24b466/comments" 
      }, 
      patch: { 
       href: "https://api.bitbucket.org/2.0/repositories/atlassian/atlassian-rest/patch/61d9e64348f9da407e62f64726337fd3bb24b466" 
      }, 
      html: { 
       href: "https://api.bitbucket.org/atlassian/atlassian-rest/commits/61d9e64348f9da407e62f64726337fd3bb24b466" 
      }, 
      diff: { 
       href: "https://api.bitbucket.org/2.0/repositories/atlassian/atlassian-rest/diff/61d9e64348f9da407e62f64726337fd3bb24b466" 
      }, 
      approve: { 
       href: "https://api.bitbucket.org/2.0/repositories/atlassian/atlassian-rest/commit/61d9e64348f9da407e62f64726337fd3bb24b466/approve" 
      } 
     }, 
     repository: { 
      links: { 
       self: { 
        href: "https://api.bitbucket.org/2.0/repositories/atlassian/atlassian-rest" 
       }, 
       avatar: { 
        href: "https://d3oaxc4q5k2d6q.cloudfront.net/m/bf1e763db20f/img/language-avatars/java_16.png" 
       } 
      }, 
      full_name: "atlassian/atlassian-rest", 
      name: "atlassian-rest" 
     }, 
     author: { 
      raw: "Joseph Walton <[email protected]>", 
      user: { 
       username: "jwalton", 
       display_name: "Joseph Walton", 
       links: { 
        self: { 
         href: "https://api.bitbucket.org/2.0/users/jwalton" 
        }, 
        avatar: { 
         href: "https://secure.gravatar.com/avatar/8e6e91101e3ed8a332dbebfdf59a3cef?d=https%3A%2F%2Fd3oaxc4q5k2d6q.cloudfront.net%2Fm%2Fbf1e763db20f%2Fimg%2Fdefault_avatar%2F32%2Fuser_blue.png&s=32" 
        } 
       } 
      } 
     }, 
     parents: [{ 
      hash: "59721f593b020123a75424285845325126f56e2e", 
      links: { 
       self: { 
        href: "https://api.bitbucket.org/2.0/repositories/atlassian/atlassian-rest/commit/59721f593b020123a75424285845325126f56e2e" 
       } 
      } 
     }, { 
      hash: "56c49d8b2ae3a094fa7ba5a1251d6dd2c7c66993", 
      links: { 
       self: { 
        href: "https://api.bitbucket.org/2.0/repositories/atlassian/atlassian-rest/commit/56c49d8b2ae3a094fa7ba5a1251d6dd2c7c66993" 
       } 
      } 
     }], 
     date: "2013-10-21T07:21:51+00:00", 
     message: "Merge remote-tracking branch 'origin/rest-2.8.x' " 
    } 
    ], 
    "page": 1 
} 
+0

Möchten Sie nur die Antwortdaten auf nur die Schlüssel reduzieren, die Sie interessieren? Habe ich die Frage falsch verstanden? –

+0

Das ist ein Nebeneffekt dessen, wonach ich suche. Ich versuche, das Antwortobjekt zu glätten, damit ich Autorennamen, Nachricht, Zeit alle auf einer Ebene haben kann. Mein Root-Problem ist, dass ich für einen einzelnen Commit nicht auf Informationen wie den Autorennamen zugreifen kann, da mehrere Ebenen in die JSON-Antwort eingebettet sind. –

+0

1) Es gibt keine programmatische Möglichkeit, dies zu tun, da verschachtelte Dicts Schlüsselnamen duplizieren könnten. 2) Welche Sprache verwenden Sie zum Anzeigen/Analysieren der JSON-Antwort, da Python unabhängig von der Tiefe die gesuchten Daten problemlos abrufen kann. Ich denke, ich kann nicht aus deinem Code ersehen, welcher Teil nicht funktioniert und was du brauchst, anstatt was du bekommst. –

Antwort

1

Nicht sicher, ob ich die Frage richtig verstehe, aber du bist dict fehlt Zitate wie von jDo erwähnt. Unter der Annahme, dies ist ein gut geformter dict, sollten Sie in der Lage sein, die Elterninformationen zuzugreifen, wie so:

parents = jd["values"][0]["parents"] 

Dann können Sie die Eltern Liste iterieren und tun, was Sie mit ihm mag:

for parent in parents: 
    do_sth_with_parent(parent["hash"], parent["links"]) 

Beantwortet das die Frage?

+0

FYI, das Diktat fehlt nicht Zitate, bitbucket war faul beim Schreiben der Dokumentation. Ich habe gleichzeitig an diesem Problem gearbeitet und nähere mich etwas, das wie deine Hilfe aussieht, also glaube ich, dass du Recht hast. Mein Problem war der Zugriff auf Elemente innerhalb eines Arrays, und ich denke, Sie haben es geschafft. –

Verwandte Themen