json.load 方法如何让对象内部都是 str 类型?

2020-06-24 15:22:05 +08:00
 smallpython

环境: python2.7.5

with open('test.json', 'r') as f:
    data = json.load(f)

此时 data 为 {u'中文的键': u'中文的值'}

里面的键和值都是 unicode 编码的

能不能让 data 为 {'中文的键': '中文的值'} 就是里面的键和值都是 str 类型

1216 次点击
所在节点    Python
7 条回复
darer
2020-06-24 15:27:14 +08:00
用 python2 你的 str 就是 bytes 啊
gzfrankie
2020-06-24 15:31:38 +08:00
像楼上说的

python2 的 string 是 bytes,只能装 ASCII 的字母,装不了中文。

python3 的 string 就是 python2 的 unicode (直接改了名),然后新弄了 bytes 这个类
smallpython
2020-06-24 15:38:21 +08:00
@gzfrankie

u'中文的值'.encode('utf-8') 之后的类型不就是 str 类型吗? 也就是字节类型, 我理解 Python2 中 str 和字节码就是一个东西

而且即便是英文字母 a

json.load 之后也是 u'a'而不是'a'
smallpython
2020-06-24 15:39:27 +08:00
@gzfrankie 虽然我可以手动把键和值都取出来手动 encode, 但是我希望 json 库自动完成这个过程
gzfrankie
2020-06-24 15:53:57 +08:00
gzfrankie
2020-06-24 15:55:45 +08:00
google 搜索“python 2 json load unicode to string” 出来第一个就是我那个答案
smallpython
2020-06-24 16:12:51 +08:00
@gzfrankie 感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/684463

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX