为了账号安全,请及时绑定邮箱和手机立即绑定

python json object_pairs_hook 字典解码为无

python json object_pairs_hook 字典解码为无

慕村9548890 2021-09-11 20:57:43
在使用 python 标准json库时,我偶然发现了一个非常令人惊讶的观察结果,更具体地说,是object_pairs_hook从那里使用时。这是我的数据:items.json:--{    "menuitem": [      {"value": "New", "onclick": "CreateNewDoc()"},      {"value": "Open", "onclick": "OpenDoc()"},      {"value": "Close", "onclick": "CloseDoc()"}    ]}--这是我的最低工作代码:Jupyter QtConsole 4.3.1Python 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)]Type 'copyright', 'credits' or 'license' for more informationIPython 6.4.0 -- An enhanced Interactive Python. Type '?' for help.import jsondef dummy_hook(input):    print("INPUT:",input)filename = r'items.json'with open(filename, 'r') as f:    data = json.load(f,object_pairs_hook=dummy_hook)令人惊讶的是(对我来说),结果是这样的:INPUT: [('value', 'New'), ('onclick', 'CreateNewDoc()')]INPUT: [('value', 'Open'), ('onclick', 'OpenDoc()')]INPUT: [('value', 'Close'), ('onclick', 'CloseDoc()')]INPUT: [('menuitem', [None, None, None])]特别是,您会发现带有“value”/“onclick”对的三个字典已被解码为None. 这对我来说是个问题,因为我一直希望对这些进行一些进一步的操作。问题:这是意料之中的吗?我在这里做错了吗?编辑:因此将钩子函数更改为:def dummy_hook(input):    print("INPUT:",input)    return 7确实将打印结果更改为:INPUT: [('value', 'New'), ('onclick', 'CreateNewDoc()')]INPUT: [('value', 'Open'), ('onclick', 'OpenDoc()')]INPUT: [('value', 'Close'), ('onclick', 'CloseDoc()')]INPUT: [('menuitem', [7,7,7])]添加return语句如何改变解码结果,我还是不明白。但是,原则上,这解决了问题。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 254 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信