- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在循环获取 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 之后打印的内容:
{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 数据使用 ast.literal_eval()
。 JSON 和 Python 文字可能看起来是一样的东西,但它们非常不同。
在这种情况下,您的数据包含一个 bool 标志,在 JSON 中设置为 false
。正确的 Python bool 值使用标题大小写,因此 False
:
>>> import json, ast
>>> s = '{"no_sell_or_sort": false, "size": 20}'
>>> json.loads(s)
{u'no_sell_or_sort': False, u'size': 20}
>>> ast.literal_eval(s)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/ast.py", line 80, in literal_eval
return _convert(node_or_string)
File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/ast.py", line 63, in _convert
in zip(node.keys, node.values))
File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/ast.py", line 62, in <genexpr>
return dict((_convert(k), _convert(v)) for k, v
File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/ast.py", line 79, in _convert
raise ValueError('malformed string')
ValueError: malformed string
其他差异包括使用 null
而不是 None
,以及 Unicode 转义序列在 Python 2 中看起来像一个普通(字节)字符串 , 在转义非 BMP 代码点时使用 UTF-16 代理。
使用 json.loads()
加载数据,而不是 ast.literal_eval()
。它不仅可以很好地处理正确的 JSON,而且更快。
在您的情况下,您似乎正在使用 json.dumps()
,然后尝试使用 ast.literal_eval()
再次加载数据。这一步不需要,您已经有一个 Python 对象。
换句话说,行:
response_item = ast.literal_eval(json.dumps(response_item, ensure_ascii=False).encode('utf8'))
充其量是多余的,最坏的情况下是非常非常错误的。将 response_item
重新编码为 JSON 字符串不会产生可以解释为 Python 文字的内容。
关于python - 值错误 : malformed string using ast. literal_eval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32695699/
我想递归解压缩一些存档 .zip。我使用 java.util.zip,但无法使用其他库。 我的代码: public static void unzip(String file) { try {
我手头的任务是能够根据地址中的文本文件处理行,并将它们分类到各自的类别中,“东”、“西”、“百老汇”、“大道”和“坏 ID” 。下面的代码可以 100% 正确地执行此操作,直到遇到包含双逗号的格式错误
这个网址 'http://profile.myspace.com/index.cfm?fuseaction=user.viewProfile&friendID=39726387 ' 在浏览器中工作得很
我不确定它发生在哪一点,但我最终得到了一个像这样的向量: vec #Levels: first second 您应该调查为什么存在格式错误的因素并修复它。 关于r - 如何修复 'malforme
我收到此错误 'Page' ionViewWillEnter error: URI malformed 这会阻止我的应用程序运行。我不知道发生了什么事。这是我的 ionic 信息和有关错误的屏幕截图。
我正在尝试构建启用了调试符号 (-g) 的 C++ 软件。问题是额外的调试符号使包含的库太大以至于最终链接步骤失败 ../../lib/libutil.a:无法读取符号:格式错误的存档 (至少我认为它
JavaScript的最佳实践是使用一些惯用法来检测错误,而不是依赖try-catch。轻松实现TypeError: if (typeof foo !== "number") { console.
我是 dart 新手,我正在尝试使用隔离来运行多个算法以更有效地多次运行它们,但是,当使用 Isolate.spawn 调用多个函数时,我开始在控制台中收到“格式错误的消息”,它仍然有效,但我想知道为
感谢 this question 的精彩回复我了解如何使用可变参数调用 javascript 函数。 现在我希望使用与构造函数一起应用 我发现了一些有趣的信息on this post . 但是我的代码
我正在使用 Postman 查询图形 API 以获取我的 AAD 实例上的应用程序列表。 验证网址:https://login.microsoftonline.com/common/oauth2/au
我寻求有关以下问题的帮助:在从“Oracle Database 12c 版本 12.1.0.1.0 - 64 位生产”中选择数据时,观察到大量“格式错误的数据包:TNS”(使用wireshark 版本
我正在使用 Postman 查询图形 API 以获取我的 AAD 实例上的应用程序列表。 验证网址:https://login.microsoftonline.com/common/oauth2/au
我有一个 Android 应用程序,它在后台执行一些网络处理,从 https://ipinfo.io/json 处的 json api 请求信息。 。 bufferReader httpConnect
尝试将对象发布到索引时,我收到以下响应: { "message": "lexical error: malformed number, a digit is required after the
我想在我的服务器上上传几组视频,然后在 HTML5 视频标签中播放它们。但是其中一些没有播放。 我检查了视频的音频流和视频流,它们分别有AAC 和H264 编解码器。所以我觉得没有问题。 然后我尝试重
我正在尝试按照 here 中的描述做一个嵌套的中继器但它出错了。 我的中继器如下: ">
QueryText = string.Format("SELECT {0}, {1} Path FROM Scope() " + "WH
由于 unescape 已被弃用,我选择了 decodeURIComponent ,但它没有按预期工作。 decodeURIComponent 无法解码以下 URI 组件 Coast%20Guard%
我正在创建一个必须连接到 Activity 目录的应用程序。 我实际上在处理更新组成员时遇到了问题。 组名是:GG-Collaboration-AgenceXXX 这是我抛出异常的 GroupRepo
我正在尝试使用 Joda 库的 DateTimeFormatter 从字符串中解析 DateTime 对象。由于某种原因,它在到达要解析的时区时抛出异常。 这是我的代码: protected
我是一名优秀的程序员,十分优秀!