Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中循环/返回所有JSON响应_Python_Json_Python 3.x - Fatal编程技术网

如何在Python中循环/返回所有JSON响应

如何在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

前言:我花了一段时间作为一名轻量级桌面应用程序开发人员(VBA和SQL,起诉我吧!),但我对python完全陌生

我正在尝试用Python打印JSON提要的输出,作为培训练习:

JSON URL-

[
{
“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中括号的形状(卷曲与方形)!