Python:请求 json 出错 - 如果使用所有标量值,则必须传递索引
Posted
技术标签:
【中文标题】Python:请求 json 出错 - 如果使用所有标量值,则必须传递索引【英文标题】:Python: request json gets error - If using all scalar values, you must pass an index 【发布时间】:2021-08-01 05:53:15 【问题描述】:当尝试从 API 请求 json 文件时,我在得到第一个结果后出现错误。
有人知道为什么要从列表中获取索引吗?
最好的问候:)
import requests
import json
import pandas as pd
import time
import datetime
### OCs List ids
OCs = ['1003473-1116-SE21','1003473-1128-AG21','1031866-12-CC21','1057440-3184-AG21','1070620-1832-CM21', '1070620-2219-SE21', '1070620-2499-CM21']
for i in OCs:
link ="http://api.mercadopublico.cl/servicios/v1/publico/ordenesdecompra.json?codigo="+ str(i) +"&ticket=F8537A18-6766-4DEF-9E59-426B4FEE2844"
response = requests.get(link, [])
data = response.json()
df = pd.DataFrame.from_dict(data)
### remove unnecessary columns
df.drop(df.columns[[0,1,2]],axis=1, inplace=True)
### flat json to pandas dataframe
df_detail = pd.json_normalize(df['Listado'])
ValueError: If using all scalar values, you must pass an index
【问题讨论】:
【参考方案1】:服务器检测到太多请求并发送错误响应(然后您的脚本抛出错误)。解决方法是等待正确响应,例如:
import requests
import json
import pandas as pd
import time
import datetime
### OCs List ids
OCs = [
"1003473-1116-SE21",
"1003473-1128-AG21",
"1031866-12-CC21",
"1057440-3184-AG21",
"1070620-1832-CM21",
"1070620-2219-SE21",
"1070620-2499-CM21",
]
for i in OCs:
link = (
"http://api.mercadopublico.cl/servicios/v1/publico/ordenesdecompra.json?codigo="
+ str(i)
+ "&ticket=F8537A18-6766-4DEF-9E59-426B4FEE2844"
)
while True: # <--- repeat until we get correct response
print(link)
response = requests.get(link, [])
data = response.json()
if "Listado" in data:
break
time.sleep(3) # <--- wait 3 seconds and try again
df = pd.DataFrame.from_dict(data)
### remove unnecessary columns
df.drop(df.columns[[0, 1, 2]], axis=1, inplace=True)
### flat json to pandas dataframe
df_detail = pd.json_normalize(df["Listado"])
# ...
【讨论】:
以上是关于Python:请求 json 出错 - 如果使用所有标量值,则必须传递索引的主要内容,如果未能解决你的问题,请参考以下文章
Spotify API:使用 Python 通过 JSON 解析时出错