前言:我已经花了一些时间作为一个轻便的桌面应用程序开发人员(VBA和SQL - 起诉我!),但我对python来说是全新的。
我试图在Python中打印JSON提要的输出作为训练练习:
JSON网址 - http://www.nactem.ac.uk/software/acromine/dictionary.py?sf=uk
[
{
"lfs": [
{
"freq": 656,
"lf": "United Kingdom",
"since": 1980,
"vars": [
{
"freq": 655,
"lf": "United Kingdom",
"since": 1980
},
{
"freq": 1,
"lf": "United-Kingdom",
"since": 2006
}
]
},
{
"freq": 393,
"lf": "urokinase",
"since": 1969,
"vars": [
{
"freq": 358,
"lf": "urokinase",
"since": 1969
},
{
"freq": 35,
"lf": "Urokinase",
"since": 1970
}
]
},
{
"freq": 6,
"lf": "uridine kinase",
"since": 1977,
"vars": [
{
"freq": 5,
"lf": "uridine kinase",
"since": 1977
},
{
"freq": 1,
"lf": "Uridine kinase",
"since": 2007
}
]
},
{
"freq": 6,
"lf": "urinary kallikrein",
"since": 1985,
"vars": [
{
"freq": 6,
"lf": "urinary kallikrein",
"since": 1985
}
]
},
{
"freq": 4,
"lf": "urea kinetics",
"since": 1980,
"vars": [
{
"freq": 2,
"lf": "urea kinetics",
"since": 1980
},
{
"freq": 2,
"lf": "urea kinetic",
"since": 1989
}
]
},
{
"freq": 4,
"lf": "University of Kentucky",
"since": 2000,
"vars": [
{
"freq": 4,
"lf": "University of Kentucky",
"since": 2000
}
]
}
],
"sf": "UK"
}
]
到目前为止,我只研究了如何使用以下代码一次返回一个结果:
import urllib.request
import json
def main():
SearchForAbbrev = input("Please enter an abbreviation to search for:")
urlData = "http://www.nactem.ac.uk/software/acromine/dictionary.py?sf=" + SearchForAbbrev
webUrl = urllib.request.urlopen(urlData)
print (webUrl.getcode())
if (webUrl.getcode() == 200):
data = webUrl.read()
data = data.decode("utf-8")
printResults(data)
else:
print ("Received an error from server, cannot retrieve results " + str(webUrl.getcode()))
def printResults(data):
theJSON = json.loads(data)
for i in theJSON:
print(i["lfs"][0]["lf"])
我最初尝试使用像print(i["lfs"]["lf"])
这样的东西没有快乐。
TypeError:list indices必须是整数或切片,而不是str
问题:如何循环遍历print(i["lfs"][0]["lf"])
中的0(索引?)值以返回所有结果。
对于奖励积分作为跟进,我如何在vars
中返回所有相关结果?
答案 0 :(得分:0)
最自然的是,循环可以通过...组织循环来完成:
for i in theJSON:
for j in i["lfs"]:
print(j["lf"])
它也可以做成一行:
print([j["lf"] for j in i["lfs"] for i in theJSON])
那是幸福的道路。检查无效输入并为vars
执行此操作仅作为练习。
答案 1 :(得分:0)
如果仔细查看输出的JSON,您可以:
lf
。因此,您只是错误地访问JSON数据。您的打印功能应如下所示:
def printResults(data):
js = json.loads(data)
for d in js:
print(d["lfs"][0]["vars"][0]["lf"])
或者,如果您要打印所有lf
:
for d in js:
for e in d["lfs"]:
for f in e["vars"]:
print(f["lf"])