【问题标题】:return JSON list and PYTHON requests library返回 JSON 列表和 PYTHON 请求库
【发布时间】:2018-12-29 17:00:04
【问题描述】:

我正在使用 python 请求模块从 3 个不同的服务器获取 JSON 响应。 2 JSON 响应如下所示:

JSON 响应 1:

{"MaleName1":"John","MaleAge1":"1.40531900","FemaleName1":"Anna","FemaleAge1":"14"}

JSON 响应 2:

{"male":[{"name":"John","age":"12"}],"female":[{"name":"Anna","age":"14"}]}

JSON 响应 3:

{"male":[["John","12",[]],["Alex","13",[]],["Glenn","12",[]],["Patrick","14",[]],["Gerard","14",[]]],"female":[["Anna","14",[]],["Lena","12",[]],["Martha","13",[]],["Penelope","13",[]],["Brenda","13",[]]]}

我的问题是解析第二个和第三个 JSON 响应的正确方法是什么,以便我可以打印以下所需值:

1st Male Name: John
1st Male Age: 12
1st Female Name: Anna
1st Female Age: 14

对于第一个 JSON 响应,使用下面的 float() 参数获得所需的响应没有问题:

import json, requests

def 1stMaleName():
    1stMaleNameData = requests.get('url')
    return 1stMaleNameData.json()['MaleName1']
    1stMaleNameValue = float(1stMaleName())
    Print ("!st Male Name: ", 1stMaleNameValue)

【问题讨论】:

  • 既然您需要的所有信息都在第二个响应中,为什么您需要解析第三个响应?
  • @AChampion 因为第二和第三响应将来自不同的来源,并且值可能彼此不同,所以我需要从两个来源获取数据以进行一些验证。

标签: python arrays json python-3.x


【解决方案1】:

对于您的第二个 JSON 查询: 1) 遍历字典

2) 遍历列表

3) 遍历列表中的字典

这将使您更接近您正在搜索的内容。

请查看example

【讨论】:

    【解决方案2】:

    第二个响应可以解析为:

    In []:
    ordinal = lambda n: {1:'st', 2:'nd', 3:'rd'}.get(n%10, 'th')
    
    d = {"male":[{"name":"John","age":"12"}],"female":[{"name":"Anna","age":"14"}]}
    for k, v in d.items():
        for i, s in enumerate(v, 1):
            print(f"{i}{ordinal(i)} {k.capitalize()} Name: {s['name']}")
            print(f"{i}{ordinal(i)} {k.capitalize()} Age: {s['age']}")
    
    Out[]:
    1st Male Name: John
    1st Male Age: 12
    1st Female Name: Anna
    1st Female Age: 14
    

    第三个回应是:

    In []:
    d = {"male":[["John","12",[]],["Alex","13",[]],["Glenn","12",[]],["Patrick","14",[]],["Gerard","14",[]]],"female":[["Anna","14",[]],["Lena","12",[]],["Martha","13",[]],["Penelope","13",[]],["Brenda","13",[]]]}
    for k, v in d.items():
        for i, s in enumerate(v, 1):
            print(f"{i}{ordinal(i)} {k.capitalize()} Name: {s[0]}")
            print(f"{i}{ordinal(i)} {k.capitalize()} Age: {s[1]}")
    
    Out[]:
    1st Male Name: John
    1st Male Age: 12
    2nd Male Name: Alex
    2nd Male Age: 13
    3rd Male Name: Glenn
    3rd Male Age: 12
    4th Male Name: Patrick
    4th Male Age: 14
    5th Male Name: Gerard
    5th Male Age: 14
    1st Female Name: Anna
    1st Female Age: 14
    2nd Female Name: Lena
    2nd Female Age: 12
    3rd Female Name: Martha
    3rd Female Age: 13
    4th Female Name: Penelope
    4th Female Age: 13
    5th Female Name: Brenda
    5th Female Age: 13
    

    注意:这个f-strings 在 Py3.6+ 中工作。对于 .format(),例如:

    f"{i}{ordinal(i)} {k.capitalize()} Name: {s['name']}"
    

    相当于:

    "{}{} {} Name: {}".format(i, ordinal(i), k.capitalize(), s['name'])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-29
      • 2018-01-03
      • 2021-08-06
      • 1970-01-01
      • 2013-04-23
      • 2017-03-12
      • 2018-01-22
      • 1970-01-01
      相关资源
      最近更新 更多