Ich versuche, einige JSON zu analysieren, die ich von einer RESTful-API empfange, aber ich habe Probleme beim Zugriff auf die Daten in Python, da anscheinend ein leerer Eigenschaftsname vorhanden ist.So analysieren Sie leere JSON-Eigenschaft/Element in Python
Eine Probe des JSON zurückgegeben:
{
"extractorData" : {
"url" : "RetreivedDataURL",
"resourceId" : "e38e1a7dd8f23dffbc77baf2d14ee500",
"data" : [ {
"group" : [ {
"CaseNumber" : [ {
"text" : "PO-1994-1350",
"href" : "http://www.referenceURL.net"
} ],
"DateFiled" : [ {
"text" : "03/11/1994"
} ],
"CaseDescription" : [ {
"text" : "Mary v. JONES"
} ],
"FoundParty" : [ {
"text" : "Lastname, MARY BETH (Plaintiff)"
} ]
}, {
"CaseNumber" : [ {
"text" : "NP-1998-2194",
"href" : "http://www.referenceURL.net"
}, {
"text" : "FD-1998-2310",
"href" : "http://www.referenceURL.net"
} ],
"DateFiled" : [ {
"text" : "08/13/1993"
}, {
"text" : "06/02/1998"
} ],
"CaseDescription" : [ {
"text" : "IN RE: NOTARY PUBLIC VS REDACTED"
}, {
"text" : "REDACTED"
} ],
"FoundParty" : [ {
"text" : "Lastname, MARY H (Plaintiff)"
}, {
"text" : "Lastname, MARY BETH (Defendant)"
} ]
} ]
} ]
Und der Python-Code I
import requests
import json
FirstName = raw_input("Please Enter First name: ")
LastName = raw_input("Please Enter Last Name: ")
with requests.Session() as c:
url = ('https://www.requestURL.net/?name={}&lastname={}').format(LastName, FirstName)
page = c.get(url)
data = page.content
theJSON = json.loads(data)
def myprint(d):
stack = d.items()
while stack:
k, v = stack.pop()
if isinstance(v, dict):
stack.extend(v.iteritems())
else:
print("%s: %s" % (k, v))
print myprint(theJSON["extractorData"]["data"]["group"])
Ich erhalte den Fehler zu verwenden bin versucht:
TypeError: list indices must be integers, not str
Ich bin neu in Parsing Python und mehr als einfache Python im Allgemeinen so entschuldigen Sie meine Ignoranz. Aber was führt mich zu glauben, dass es eine leere Eigenschaft ist, dass, wenn ich ein Tool verwenden, um die JSON visuell online zu sehen, ich leere Klammern bekommen, wie so:
printscreen http://image.prntscr.com/image/6f8a8e4a1b8742d081bff024207d6426.png
Jede Hilfe dieser Daten in Text-Parsing wäre eine große Hilfe.
EDIT: Jetzt bin ich in der Lage einen bestimmten Knoten mit diesem Code zu verweisen:
for d in group:
print group[0]['CaseNumber'][0]["text"]
Aber jetzt, wie kann ich iterieren über alle in der Gruppe Eigenschaft aufgeführt Wörterbücher alle Knoten zur Liste der Aufschrift „CaseNumber“ weil es in jedem von ihnen existieren sollte. z.B
print group[0]['CaseNumber'][0]["text"]
dann
for d in group:
print group[1]['CaseNumber'][0]["text"]
und so weiter und so fort. Vielleicht eine ganze Zahl inkrementieren, bis sie das Ende erreicht? Ich bin mir nicht ganz sicher.
Das hilft ein bisschen. Ich war in der Lage, den Inhalt von "Gruppe" zu retreißen. Ich glaube, Sie wollten ein schließendes Zitat nach dem Wort "Daten" in Ihrem zweiten Codeblock haben, weil sonst ein Fehler ausgegeben wurde. Ich bin immer noch ein bisschen verwirrt darüber, was genau die for-Schleife tut. "Gruppe" wird als Python-Wörterbuch zurückgegeben (oder scheint es zumindest zu sein), aber ich habe immer noch Probleme beim Zugriff auf die einzelnen Eigenschaften.Zum Beispiel: {u'CaseDescription ': [{u'text': u'NAME '}] Mein Verständnis ist der Text u'CaseDescription' sollte der Schlüsselname sein, um es zu verweisen, aber es scheint nicht zu sein Arbeit. –
@HunterBeach, 'data' ist eigentlich eine Liste von Wörterbüchern –
@HunterBeach meine Formulierung war ein bisschen unpassend, Jordans Bearbeitung klärt es ein bisschen mehr. Wenn Sie noch verwirrt sind, können Sie Ihre Frage mit Code aktualisieren, den Sie gerade versuchen, um Ihr Ziel zu erreichen –