问题描述
我正在从API将JSON数据导入Python,并遇到以下解码错误:
JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
看看在线示例,它会立即清除我的JSON数据具有'
,其他人具有"
。
理想情况下,我想知道为什么以这种方式下载它。看来这很可能是我的错误,而不是他们的错误。
我认为改正JSON格式应该很容易,但是我在这里也失败了。请参阅下面的代码,了解如何获取JSON数据以及如何修复它。
#----------------------------------------
#---Read this only if you want to download
#---the data yourself.
#----------------------------------------
#Built from 'Towards Data Science' guide
#https://towardsdatascience.com/how-to-use-riot-api-with-python-b93be82dbbd6
#Must first have installed riotwatcher
#Info in my example is made up,I can't supply a real API code or
#I get in trouble. Sorry about this. You could obtain one from their website
#but this would be a lot of faff for what is probably a simple StackOverflow
#question
#If you were to get/have a key you could use the following information:
#<EUW> for region
#<Agurin> for name
#----------------------------------------
#---Code
#----------------------------------------
#--->Set Variables
#Get installed riotwatcher module for
#Python
import riotwatcher
#Import riotwatcher tools.
from riotwatcher import LolWatcher,ApiError
#Import JSON (to read the JSON API file)
import json
# Global variables
# Get new API from
# https://developer.riotgames.com/
api_key = 'RGAPI-XXXXXXX-XXX-XXXX-XXXX-XXXX'
watcher = LolWatcher(api_key)
my_region = 'MiddleEarth'
#need to give path to where records
#are to be stored
records_dir = "/home/solebaysharp/Projects/Riot API/Records"
#--->Obtain initial data,setup new varaibles
#Use 'watcher' to get basic stats and setup my account as a variable (me)
me = watcher.summoner.by_name(my_region,"SolebaySharp")
# Setup retrieval of recent match info
my_matches = watcher.match.matchlist_by_account(my_region,me["accountId"])
print(my_matches)
#--->Download the recent match data
#Define where the JSON data is going to go
recent_matches_index_json = (records_dir + "/recent_matches_index.json")
#get that JSON data
print ("Downloading recent match history data")
file_handle = open(recent_matches_index_json,"w+")
file_handle.write(str(my_matches))
file_handle.close()
#convert it to python
file_handle = open(recent_matches_index_json,)
recent_matches_index = json.load(file_handle)
除了这个给予者以下错误...
JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
所以我改正了这个问题:
file_handle = open(recent_matches_index_json)
json_sanitised = json.loads(file_handle.replace("'",'"'))
这将返回...
AttributeError: '_io.TextIOWrapper' object has no attribute 'replace'
为了完整起见,下面是JSON外观的示例。我添加了段落以增强可读性。不是这样的。
{'matches': [
{'platformId': 'NA1','gameId': 5687555181,'champion': 235,'queue': 400,'season': 13,'timestamp': 1598243995076,'role': 'DUO_SUPPORT','lane': 'BOTTOM'
},{'platformId': 'NA1','gameId': 4965733458,'timestamp': 1598240780841,'gameId': 4583215645,'champion': 111,'timestamp': 1598236666162,'lane': 'BOTTOM'
}],'startIndex': 0,'endIndex': 100,'totalGames': 186}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)