【发布时间】:2016-06-24 03:07:51
【问题描述】:
我正在尝试解析我从 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 时,我得到空括号,就像这样:
任何将这些数据解析为文本的帮助都会有很大帮助。
编辑:现在我可以使用此代码引用某个节点:
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"]
等等等等。也许增加某种整数直到它到达末尾?我不太确定。
【问题讨论】: