如何从Python中的API中提取JSON数组?

我在从http://api.divesites.com提取JSON数组时遇到问题。 在Python 3.7中手动将数据设置为字符串时,可以看到该数组。

    import json

def main():
    hardcode = """{"request":{"str":null,"timestamp":1572865590,"loc":{"lat":"50.442","lng":"-4.08279999999999"},"mode":"sites","dist":"9","api":1},"sites":[{"currents":null,"distance":"7.47","hazards":null,"lat":"50.3378","name":"Fort Bovisand","water":null,"marinelife":null,"description":null,"maxdepth":null,"mindepth":null,"predive":null,"id":"24387","equipment":null,"lng":"-4.1285"},{"currents":null,"distance":"7.93","lat":"50.3352","name":"Plymouth Breakwater","id":"24388","lng":"-4.1485"}],"version":1,"result":true}
        """
    print("Original Data: ---",get_data(hardcode))
    print("Site Data:----",get_data(hardcode)['sites'])

def get_data(data):
    return json.loads(data)

if __name__=='__main__':
    main()

输出

Original Data: --- {'request': {'str': None,'timestamp': 1572865590,'loc': {'lat': '50.442','lng': '-4.08279999999999'},'mode': 'sites','dist': '9','api': 1},'sites': [{'currents': None,'distance': '7.47','hazards': None,'lat': '50.3378','name': 'Fort Bovisand','water': None,'marinelife': None,'description': None,'maxdepth': None,'mindepth': None,'predive': None,'id': '24387','equipment': None,'lng': '-4.1285'},{'currents': None,'distance': '7.93','lat': '50.3352','name': 'Plymouth Breakwater','id': '24388','lng': '-4.1485'}],'version': 1,'result': True}
Site Data:---- [{'currents': None,'lng': '-4.1485'}]

但是,当我尝试执行GET请求(使用urllib.request.urlopen())时,我仅收到对象。

import urllib.request
import json

def get_jsonparsed_data(url):
    response = urllib.request.urlopen(url)
    data = response.read().decode("utf-8")
    return json.loads(data)

def main():
    url = 'http://api.divesites.com/?mode=sites&lat=-50.350874&lng=175.849890&dist=12'
    print("Original Data: ---",get_jsonparsed_data(url))
    print("Sites: ----",get_jsonparsed_data(url)['sites'])



if __name__=='__main__':
    main()

输出

Original Data: --- {'request': {'str': None,'timestamp': 1572866211,'loc': {'lat': '-50.350874','lng': '175.849890'},'dist': '12','sites': [],'result': True}
Site Data:---- []

我做错什么了吗,还是我需要采取额外的步骤?

lyloney 回答:如何从Python中的API中提取JSON数组?

解决了。我花了很长时间专注于调试我忘记检查最终API调用的代码。原来我没有设置足够的距离,或者起始经度和纬度都不正确。这与我的硬编码JSON不同。

URL应该为:http://api.divesites.com/?mode=sites&lat=50.442&lng=-4.08279999999999&dist=9

愚蠢的错误。感谢您的帮助。它让我看。

,

首先,我将改用requests库,然后您可以找到解决方案here

本文链接:https://www.f2er.com/3167064.html

大家都在问