如何在Python中循环/返回所有JSON响应
前言:我花了一段时间作为一名轻量级桌面应用程序开发人员(VBA和SQL,起诉我吧!),但我对python完全陌生 我正在尝试用Python打印JSON提要的输出,作为培训练习: JSON URL-如何在Python中循环/返回所有JSON响应,python,json,python-3.x,Python,Json,Python 3.x,前言:我花了一段时间作为一名轻量级桌面应用程序开发人员(VBA和SQL,起诉我吧!),但我对python完全陌生 我正在尝试用Python打印JSON提要的输出,作为培训练习: JSON URL- [ { “lfs”:[ { “频率”:656, “lf”:“联合王国”, “自”:1980年以来, “vars”:[ { “频率”:655, “lf”:“联合王国”, “自”:1980年 }, { “频率”:1, “lf”:“联合王国”, “自”:2006年 } ] }, { “频率”:393, “l
[
{
“lfs”:[
{
“频率”:656,
“lf”:“联合王国”,
“自”:1980年以来,
“vars”:[
{
“频率”:655,
“lf”:“联合王国”,
“自”:1980年
},
{
“频率”:1,
“lf”:“联合王国”,
“自”:2006年
}
]
},
{
“频率”:393,
“lf”:“尿激酶”,
“自”:1969年,
“vars”:[
{
“频率”:358,
“lf”:“尿激酶”,
“自”:1969年
},
{
“频率”:35,
“lf”:“尿激酶”,
“自”:1970年
}
]
},
{
“频率”:6,
“lf”:“尿苷激酶”,
“自”:1977年,
“vars”:[
{
“频率”:5,
“lf”:“尿苷激酶”,
“自”:1977年
},
{
“频率”:1,
“lf”:“尿苷激酶”,
“自”:2007年
}
]
},
{
“频率”:6,
“lf”:“尿激肽释放酶”,
“自”:1985年,
“vars”:[
{
“频率”:6,
“lf”:“尿激肽释放酶”,
“自”:1985年
}
]
},
{
“频率”:4,
“lf”:“尿素动力学”,
“自”:1980年以来,
“vars”:[
{
“频率”:2,
“lf”:“尿素动力学”,
“自”:1980年
},
{
“频率”:2,
“lf”:“尿素动力学”,
“自”:1989年
}
]
},
{
“频率”:4,
“lf”:“肯塔基大学”,
“自”:2000年以来,
“vars”:[
{
“频率”:4,
“lf”:“肯塔基大学”,
“自”:2000年
}
]
}
],
“sf”:“英国”
}
]
到目前为止,我只知道如何使用下面的代码一次返回一个结果:
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:列表索引必须是整数或片,而不是str
问题:如何在打印(I[“lfs”][0][“lf”])
中循环0(索引?)值以返回所有结果
对于后续奖励积分,我如何在
vars
中返回所有相关结果 最自然的是,循环可以通过。。。组织循环:
for i in theJSON:
for j in i["lfs"]:
print(j["lf"])
也可以通过一个衬里完成:
print([j["lf"] for j in i["lfs"] for i in theJSON])
这是一条快乐的道路。检查无效输入并对
变量执行此操作将作为一项练习。如果仔细查看正在输出的JSON,您会发现:
一系列口述
在每个dict中,lfs是一个包含多个dict的数组
每个dict中都有一个名为vars的键,它是dict的另一个数组
正是在这张纸里面,他们可以找到你要打印的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"])
谢谢你的回答-我现在可以看到我的错误的方式!如果我能把你和甘尼什的答案都记下来,我会的。太好了!现在我明白我错在哪里了——我知道我将不得不更加注意JSON/Python中括号的形状(卷曲与方形)!