我正在使用循环获取JSON API,以下是我的循环内容:
response_item = requests.request('GET',url_item,params=None,verify=False)
response_item = json.loads(response_item.text)
response_item = ast.literal_eval(json.dumps(response_item, ensure_ascii=False).encode('utf8'))
我扫描了大约45000个JSON对象,在每次迭代中都生成了“url_item”变量。每个对象都是相同的,我可能会获取大约7000个对象,但在达到第7064个对象时出现以下错误:
Traceback (most recent call last):
File "C:\Python27\tools\api_item.py", line 47, in <module>
response_item = ast.literal_eval(json.dumps(response_item, ensure_ascii=False).encode('utf8'))
File "C:\Python27\lib\ast.py", line 80, in literal_eval
return _convert(node_or_string)
File "C:\Python27\lib\ast.py", line 63, in _convert
in zip(node.keys, node.values))
File "C:\Python27\lib\ast.py", line 62, in <genexpr>
return dict((_convert(k), _convert(v)) for k, v
File "C:\Python27\lib\ast.py", line 63, in _convert
in zip(node.keys, node.values))
File "C:\Python27\lib\ast.py", line 62, in <genexpr>
return dict((_convert(k), _convert(v)) for k, v
File "C:\Python27\lib\ast.py", line 79, in _convert
raise ValueError('malformed string')
ValueError: malformed string
我曾经打印第二个和第三个“response_item”。当然,在这种情况下,由于我在 json.load 之前发生了错误,所以第三个没有显示。下面是我在 json.load 后打印的内容:
{u'restrictions': [], u'name': u'Sac \xe0 dos de base', u'level': 0, u'rarity': u'Basic', u'vendor_value': 11, u'details': {u'no_sell_or_sort': False, u'size': 20}, u'game_types': [u'Activity', u'Wvw', u'Dungeon', u'Pve'], u'flags': [u'NoSell', u'SoulbindOnAcquire', u'SoulBindOnUse'], u'icon': u'https://render.guildwars2.com/file/80E36806385691D4C0910817EF2A6C2006AEE353/61755.png', u'type': u'Bag', u'id': 8932, u'description': u'Un sac de 20 emplacements pour les personnages d\xe9butants.'}
在这个之前我得到的每一个项目都有相同的类型和格式,除了第7064个之外,我没有任何错误!
谢谢你的帮助!
json.dumps()
的输出上使用ast.literal_eval()
呢? - Martijn Pietersoutput = json.dumps(json.load(fdobject))
而不是ast.literal_eval
吗? - S.K. Venkat