我在论坛上搜索过,我看过很多关于它的讨论,但没有什么特别的。 所以我有一个很长的json文件,我想在python中加载它作为字典, not list 。 您可以在此处查看文件https://www.bicing.cat/availability_map/getJsonObject
这是我加载文件的代码,但每次我运行它时,都收到错误: TypeError:list indices必须是整数,而不是str
import json
import requests
if __name__=='__main__':
response = requests.get("https://www.bicing.cat/availability_map /getJsonObject")
data=response.json()
print data["typeStation"][22]
答案 0 :(得分:1)
使用pandas库来处理类似表的数据:
import pandas as pd
# Read to dataframe
df = pd.read_json("https://www.bicing.cat/availability_map/getJsonObject")
def return_stations(df, n=10, ascending=False):
"""a function allowing to order the bike-stations by available “slots”
and display first N stations. The user can also choose to have the
results in ascending or descending order (by default descending). The
parameters are: -N: number of stations to display. It is optional and
by default N=10. -order: It is optional and the default value is
descending"""
return (df.sort_values(by='slots',ascending=ascending)
.head(n).set_index('id').to_dict('i'))
# Let's print the first 3 in descending order
print(return_stations(df, n=3, ascending=False))
返回以下内容:
{10: {'address': 'Carrer Comerç',
'addressNumber': '27',
'bikes': 0,
'district': 1,
'lat': 41.38498,
'lon': 2.18417,
'name': '10 - C/ COMERÇ, 27',
'nearbyStations': '9,14,115,389',
'slots': 33,
'stationType': 'BIKE',
'status': 'CLS',
'zip': 8003},
213: {'address': 'Sant Fe de Nou Mèxic',
'addressNumber': '2',
'bikes': 0,
'district': 6,
'lat': 41.393783,
'lon': 2.135078,
'name': '213 - C/ SANTA FE DE NOU MÈXIC, 2',
'nearbyStations': '207,208,214,215',
'slots': 33,
'stationType': 'BIKE',
'status': 'OPN',
'zip': 8017},
326: {'address': 'Balmes',
'addressNumber': '409',
'bikes': 0,
'district': 6,
'lat': 41.407384,
'lon': 2.1383,
'name': '326 - C/BALMES, 409',
'nearbyStations': '321,327,328,330',
'slots': 33,
'stationType': 'BIKE',
'status': 'OPN',
'zip': 8022}}
哦,还有一件事......看到你在那里经历了: 我们可以编写一个geojson文件并将其绘制在地图上,将文件放在geojson.io上。这是一个功能:
def return_geojson(df, latlng):
d = dict(type="FeatureCollection",features=[])
for ind,row in df.fillna('').iterrows():
p = row.drop(latlng).to_dict()
g = dict(type="Point",coordinates=list(row[latlng])[::-1])
f = dict(type="Feature", properties=p, geometry=g)
d['features'].append(f)
return d
with open('map.geojson','w') as f:
d = return_geojson(df,['lat','lon'])
json.dump(d,f)
结果: