我正在尝试解析我从RESTful API接收的一些JSON,但是我在使用Python访问数据时遇到了问题,因为它似乎有一个空的属性名称。
返回了JSON的示例:
{
"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)"
} ]
} ]
} ]
我试图使用的Python代码
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"])
我收到错误:
TypeError: list indices must be integers, not str
我是解剖Python的新手,而不仅仅是简单的python,所以请原谅我的无知。但是让我相信它是一个空的属性是因为当我使用工具在线观看JSON时,我得到空括号,如下所示:
printscreen http://image.prntscr.com/image/6f8a8e4a1b8742d081bff024207d6426.png
将这些数据解析为文本的任何帮助都会有很大帮助。
编辑:现在我可以使用以下代码引用某个节点:
for d in group:
print group[0]['CaseNumber'][0]["text"]
但是现在我如何迭代group属性中列出的所有字典以列出标记为" CaseNumber"的所有节点。因为它应该存在于每一个中。例如
print group[0]['CaseNumber'][0]["text"]
然后
for d in group:
print group[1]['CaseNumber'][0]["text"]
依此类推。也许递增某种整数直到它结束?我不太确定。
答案 0 :(得分:1)
如果仔细查看json,您正在访问的data
密钥实际上是一个列表,但是data['group']
正试图访问它,就像它是一个字典一样,这会引发TypeError。 / p>
要缩小你的json,就像这样
{
"extractorData": {
"url": "string",
"resourceId": "string",
"data": [{
"group": []
}]
}
}
因此,如果您想访问组,则应首先检索data
这是一个列表。
data = sample['extractorData']['data']
然后您可以迭代data
并在其中获取group
for d in data:
group = d['group']
我希望这能为你澄清一些事情。