首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何循环/返回Python中的所有JSON响应

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

Stack Overflow用户
提问于 2016-02-04 17:28:51
回答 2查看 181关注 0票数 0

前言:我花了一段时间做一个轻巧的桌面应用程序开发人员(VBA和SQL -请告我!),但我对python完全陌生。

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

JSON http://www.nactem.ac.uk/software/acromine/dictionary.py?sf=uk

代码语言:javascript
复制
[
    {
        "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"
    }
]

到目前为止,我只知道如何使用以下代码一次返回一个结果:

代码语言:javascript
复制
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"])

一开始,我试着在没有joy的情况下使用类似print(i["lfs"]["lf"])的东西。

TypeError:列表索引必须是整数或切片,而不是str

问题:如何循环遍历0(索引?)值,以返回所有结果。

对于奖金作为后续,我如何返回所有相关的结果在vars

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-04 17:50:49

如果您仔细查看正在输出的JSON,您可以看到:

  1. 一排排的骰子
  2. 在每个dict中,lfs是一个包含多个dicts的数组。
  3. 每个dicts内部都有一个名为vars的键,这是另一个dicts数组。
  4. 正是在这段代码中,您尝试打印的lf才能被找到。

因此,您只是简单地不正确地访问JSON数据。您的打印功能应该如下:

代码语言:javascript
复制
def printResults(data):
    js = json.loads(data)
    for d in js:
        print(d["lfs"][0]["vars"][0]["lf"])

或者,如果你想打印所有的lf

代码语言:javascript
复制
for d in js:
    for e in d["lfs"]:
        for f in e["vars"]:
            print(f["lf"])
票数 0
EN

Stack Overflow用户

发布于 2016-02-04 17:45:19

最自然的,循环可以通过.组织一个循环:

代码语言:javascript
复制
  for i in theJSON:
    for j in i["lfs"]:
      print(j["lf"])

它也可以做一个一条龙:

代码语言:javascript
复制
print([j["lf"] for j in i["lfs"] for i in theJSON])

那是一条快乐的道路。检查无效输入并对vars执行此操作作为练习。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35207683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档