当前位置: 首页 > 知识库问答 >
问题:

解析JSON[python]时的解码问题

杜霍英
2023-03-14

我正在阅读Python中的JSON文件,它有很多字段和值(约8000条记录)。env: windows 10, python 3.6.4;代码:

import json
json_data = json.load(open('json_list.json'))
print (json_data)

有了这个,我得到一个错误。下面是堆栈跟踪:

  json_data = json.load(open('json_list.json'))
  File "C:\Program Files (x86)\Python36-32\lib\json\__init__.py", line 296, in load
    return loads(fp.read(),
  File "C:\Program Files (x86)\Python36-32\lib\encodings\cp1252.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 7977319: character maps to <undefined>

除此之外,我也试过了

import json
with open('json_list.json', encoding='utf-8') as fd:
     json_data = json.load(fd)
     print (json_data)

有了这个,我的程序运行了很长时间,然后挂起,没有输出。

我搜索了几乎所有与此相关的主题,但找不到解决方案。

注意:JSON数据是有效的,因为当我在Postman/任何REST客户端上看到它时,它不会报告任何异常。

关于如何加载我的JSON数据的任何帮助或替代解决方案(任何方式将其转换为字符串,然后返回到JSON等)都将有很大的帮助。

以下是报告的错误周围的文件外观:

>>> from pprint import pprint
>>> f = open('C:/Users/c5242046/Desktop/test2/dblist_rest.json', 'rb')
>>> f.seek(7977319)
7977319
>>> pprint(f.read(100))
(b'\x81TICA EL ABGEN INGL\xc3\x83\xc2\x89S, S.A.","memory_size_gb":"64","since'
 b'":"2017-04-10","storage_size_gb":"84.747')

共有1个答案

阳长恨
2023-03-14

您询问的代码片段似乎是双重编码的。基本上,无论最初生成这些数据的是什么,都会生成拉丁语-1或某些相关编码的文本(Windows代码页1252?)。然后,它被送入一个将拉丁语-1转换为UTF-8的过程。。。两次

当然,“转换”已经是UTF-8的数据,但告诉计算机它是拉丁语-1,只会产生mojibake。

字符串INGL\xc3\x83\xc2\x89S表明了这种分析,如果您可以猜到它应该是大写的INGLés,认识到É的UTF-8编码是\xC3\x89,然后检查这两个字节用拉丁语-1编码的字符(或者,碰巧是Unicode,它是拉丁语-1的超集,尽管它们在编码级别上不兼容)。

请注意,能够猜测一个有问题的序列应该代表哪个字符串是这里的关键步骤;它还解释了为什么包括有问题数据的代表性片段——有足够的上下文!-对于调试至关重要。

无论如何,如果整个文件都有相同的症状,您应该能够撤消第二轮多余且不正确的重新编码;虽然文件中的一个错误让我觉得可能是一个局部问题,只有一条或几条记录。可能它们是从多个输入文件中合并而来的,其中只有一个有此错误。然后修复它需要相当多的检测工作和手动编辑,或者识别和修复错误的来源。一个快速而肮脏的解决方法是简单地手动删除任何错误记录。

 类似资料:
  • 问题内容: 我正在用Python阅读JSON文件,其中包含许多字段和值(约8000条记录)。Env:Windows 10,Python 3.6.4;码: 这样我得到一个错误。下面是堆栈跟踪: 伴随着我,我尝试了 与此相关,我的程序运行了很长时间,然后挂起,没有任何输出。 我搜索了几乎与此相关的所有主题,但找不到解决方案。 注意:JSON数据是有效的,因为当我在Postman /任何REST客户端上

  • 本文向大家介绍Python解析json代码实例解析,包括了Python解析json代码实例解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Python解析json代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 什么是json格式: JSON(JavaScript Object Notation):一种轻量级数据交换格式

  • 我已经下载了json和我的对话档案。我坚持使用奇怪的编码。 json的例子: 应该是这样的: 我正试图这样反序列化它: 不幸的是,输出如下: 有人知道Facebook如何编码json吗?我尝试了几种方法,但没有结果。 谢谢你的帮助。

  • 问题内容: 我正在尝试在我的android应用程序中解析Json的链接是https://www.buzzador.com/apps/present_software/webservice/index.php?op=ProductQ&campaign_id=607&userid=10776 当我将其放入Json对象时,它给我带来错误错误是:08-31 14:40:52.281:WARN / Syst

  • 我试图使用restTemplate.exchange()方法解析来自服务的JSON响应。但由于解析错误而失败。 Java代码 JSON对象Java类 错误: 2018-07-12 15:40:00.876错误6044--[nio-8080-exec-1]O.A.C.C.C.[.[/].[dispatcherServlet]:路径为[]的上下文中servlet[dispatcherServlet]的

  • 本文向大家介绍深入理解Python对Json的解析,包括了深入理解Python对Json的解析的使用技巧和注意事项,需要的朋友参考一下 Json简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于

  • 我有以下命令。我想循环使用此键和值,即对于冰/冷的项目,打印“值” 我试过这个: 却给我错误

  • 主要内容:json.dumps(),json.loads()本节我们来介绍一下如何使用 Python 来创建和解析 JSON 数据。 与 PHP 类似,Python 中同样提供了两个函数来分别创建和解析 JSON 数据, 注意:本节是基于 Python3 进行介绍的: json.dumps():将 Python 对象转换为 JSON 数据; json.loads():将 JSON 数据解析为 Python 对象。 json.dumps() 在 Python