我想解析一个 JSON 格式的 bytes
字符串以将其转换为 python 对象。这是我的来源:
my_bytes_value = b'[{\'Date\': \'2016-05-21T21:35:40Z\', \'CreationDate\': \'2012-05-05\', \'LogoType\': \'png\', \'Ref\': 164611595, \'Classe\': [\'Email addresses\', \'Passwords\'],\'Link\':\'http://some_link.com\'}]'
这是我想要的预期结果:
[{
"Date": "2016-05-21T21:35:40Z",
"CreationDate": "2012-05-05",
"LogoType": "png",
"Ref": 164611595,
"Classes": [
"Email addresses",
"Passwords"
],
"Link": "http://some_link.com"}]
首先,我将字节转换为字符串:
my_new_string_value = my_bytes_value.decode("utf-8")
但是当我尝试调用 loads
将其解析为 JSON 时:
my_json = json.loads(my_new_string_value)
我收到此错误:
json.decoder.JSONDecodeError: Expecting value: line 1 column 174 (char 173)
原文由 Merouane Benthameur 发布,翻译遵循 CC BY-SA 4.0 许可协议
您的
bytes
对象 几乎 是 JSON,但它使用单引号而不是双引号,并且它需要是一个字符串。所以解决它的一种方法是将bytes
解码为str
并替换引号。另一种选择是使用ast.literal_eval
;详情见下文。如果您想打印结果或将其作为有效 JSON 保存到文件中,您可以将 JSON 加载到 Python 列表中,然后将其转储。例如,输出
正如 Antti Haapala 在评论中提到的那样,一旦我们将其解码为字符串,我们就可以使用
ast.literal_eval
将my_bytes_value
转换为 Python 列表。通常,出现此问题是因为有人通过打印其 Python
repr
而不是使用json
模块来创建正确的 JSON 数据来保存数据。如果可能,最好解决该问题,以便首先创建正确的 JSON 数据。