在python中将json文件提取到字典中

Posted

技术标签:

【中文标题】在python中将json文件提取到字典中【英文标题】:Extract a json file into a dictionary in python 【发布时间】:2015-12-04 16:38:38 【问题描述】:

我正在尝试编写一个脚本,该脚本采用 json 文件 pizza-train.json 并从列表中的每个字典中提取 request_text 字段。但是运行以下代码时出现错误:

代码:

import json

json1_file = open("pizza-train.json", 'r')
json1_str = json1_file.read()

json1_data = json.loads(json1_str)

print(json1_data)

错误:

文件“C:\Python34\lib\encodings\cp1252.py”,第 19 行,编码返回 codecs.charmap_encode(input,self.errors,encoding_table)[0]

UnicodeEncodeError:“charmap”编解码器无法对位置 58765-58767 中的字符进行编码:字符映射到

我尝试了不同的解决方案,例如:encoding="UTF-8".encode('utf-8')

谁能解释我为什么它不打印 json1_data

【问题讨论】:

请提供完整的堆栈跟踪。您是否在print(json1_data) 行收到此错误?如果是,那么您不能在控制台中打印非 Windows1252 字符,因为这是您的控制台字符集。 我在该行得到了错误。如何更改他的控制台字符集? 显示答案:使用chcp。长答案如下 【参考方案1】:

您的数据中有一些字符(位置 58765-58767)无法用您的字符集 (Windows1252) 表示。您应该将控制台切换到支持它的字符集(Windows 中的chcp 命令)。

示例如下:

我有文件:

# coding=utf-8
print(u"русский текст") # This is russian text (cyrilic chars)

文件本身是 UTF8,因此 Python 知道字母“й”是西里尔字母。

但我的代码页 CP1252 没有这样的字母(因为它只有拉丁字符)。

>chcp
Active code page: 1252

>python.exe foo.py
Traceback (most recent call last):
  File "foo.py", line 2, in <module>
    print(u"руÑÑкий текÑÑ‚")
  File "c:\Python27\lib\encodings\cp1252.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode characters in position     0-6: character maps to <undefined>

我现在将我的代码页更改为一个,其中包含字母“й”和其他:

>chcp 1251
Active code page: 1251

>c:\Python27\python.exe foo.py
русский текст

我可以使用 866(这也是 DOS cyr 代码页)

【讨论】:

以上是关于在python中将json文件提取到字典中的主要内容,如果未能解决你的问题,请参考以下文章

追加到 json 中转储的字典列表,而不用 python 加载列表

如何在 Python 中将 JSON 字符串转换为字典?

在python中从多个JSON文件中提取信息到单个CSV文件

在python中将JSON字典转换为JSON数组

Python:查询字典到 JSON

如何在 Swift 中将数组添加到我的 JSON 字典