2017-04-18 4 views
0

alle,Python Referenzierung json Array

Ich habe ein Skript Ich baue alle offenen Pull-Anforderungen zu finden und die sha Hash zu vergleichen, aber ich kann nicht scheinen, um sie zu finden ....

for repo in g.get_user().get_repos(): 
print (repo.full_name) 
json_pulls = requests.get('https://api.github.com/repos/' + repo.full_name + '/pulls?state=open+updated=<' + str(cutoff_date.date())+ '&sort=created&order=asc') 
if (json_pulls.ok): 
    for item in json_pulls.json(): 
     for c in item.items(): 
      #print(c["0"]["title"]) 
      #print (json.dumps(state)) 
      print(c) 

die Code-Zyklen durch die vorhandenen repos und die Liste der Pull-Anforderungen und ich bekomme die Ausgabe:

output

Aber ich kann nicht für das Leben von mir nicht herausfinden, wie man Koll t einzelne Felder ...

Ich habe versucht, die Referenzen mit:

  1. print(c['title']) - den Fehler nicht definiert ist
  2. print(c['0']['title']) -a Rohr Fehler

was ich suche ist ein einfache Liste für jede Anfrage ....

title 
id 
state 
base/sha 
head/sha 

Kann jemand bitte weisen Sie darauf hin, was ich falsch mache, wenn ich auf die JSON-Elemente in meinem Python-Skript verweise, da es mich verrückt macht.

Der vollständige Code wie mit Ihrer Hilfe natürlich ...:

# py -m pip install <module> to install the imported modules below. 
# 
# 
# Import stuff 
from github import Github 
from datetime import datetime, timedelta 
import requests 
import json 
import simplejson 
# 
# 
#declare stuff 
# set the past days to search in the range 
PAST = 5 

# get the cut off date for the repos 10 days ago 
cutoff_date = datetime.now() - timedelta(days=PAST) 
#print (cutoff_date.date()) 

# Repo oauth key for my repo 
OAUTH_KEY = "(get from github personal keys)" 

# set base URL for API query 
BASE_URL = 'https://api.github.com/repos/' 

# 
# 
# BEGIN STUFF 

# First create a Github instance: 
g = Github(login_or_token=OAUTH_KEY, per_page=100) 

# get all repositories for my account that are open and updated in the last 
no. of days.... 
for repo in g.get_user().get_repos(): 
print (repo.full_name) 
json_pulls = requests.get('https://api.github.com/repos/' + repo.full_name 
+ '/pulls?state=open+updated=<' + str(cutoff_date.date())+ 
'&sort=created&order=asc') 
if (json_pulls.ok): 
    for item in json_pulls.json(): 
     print(item['title'], item['id'], item['state'], item['base']['sha'], 
    item['head']['sha']) 

Die Repo-Website ist eine einfache Website, mit zwei repos und 1 oder 2 Pull-Anforderungen gegen spielen.

Die Idee des Skripts, wenn es fertig ist, es durch alle Repos zu durchlaufen, finden Sie die Pull-Anfragen, die älter als x Tage sind und öffnen, sucht den sha für den Zweig (und sha für die Master-Zweige), zu überspringen ..... die Zweige entfernen), die nicht Zweige meistern sind, so alten Code und ziehen Anfragen entfernen der repos zu halten ordentlich ....

+0

Könnten Sie die Logik vor der for-Schleife auch posten (siehe https://stackoverflow.com/help/mcve), so dass man einfach kopieren kann, schnipste und testet es? –

+0

Dump den Screenshot. Geben Sie uns ein testbares Paar von Beispieleingaben. – tdelaney

+0

Es ist nur 'Element [" Titel "]', etc ... – tdelaney

Antwort

2

json_pulls.json() gibt eine Liste der Wörterbücher, so können Sie einfach tun:

for item in json_pulls.json(): 
    print (item['title'], item['id'], item['state'], item['base']['sha'], item['head']['sha']) 

Es gibt keine Notwendigkeit, über item.items() iterieren.

+0

@tdelaney Ich überprüft die Github-Dokumentation, gibt es ein JSON-Objekt, das in ein Python-Dict konvertiert werden soll. – Barmar

+0

Hoppla, verpasst ein Level. – Barmar

+0

Ja .... Das war es .. das funktionierte gut für mich .. Danke für die Hilfe! –

0
for key, value in item.items(): 
    if (key == 'title'): 
     print(value) 
     #Do stuff with the title here 

hinzu: Json als dict zurückkehren sollte, und der Befehl for in Python sucht standardmäßig nach einem key->val-Paar, wenn er unter dictionary.items() aufgerufen wird.

+1

Das ist ein teurer Weg zu tun, wenn 'Titel' in item: ' – tdelaney