python中未调用json自定义object_hook

时间:2019-02-07 07:55:19

标签: python json

我写了一个自定义的钩子,当输入字符串在python中是有效的字典时,该钩子就可以使用,但是在有效的列表中,它就不起作用。

[1,2]是有效的json,但是如果我使用自定义钩子将其传递给json.loads,则不会调用该钩子。

import json

def my_hook(object):
    print("{} : {}".format(type(object), object))
    return object


l = json.dumps([1,2])
d = json.dumps({'a': 8})

# my_hook is being called in this case
json.loads(d, object_hook=my_hook)

# my_hook is not being called in this case
json.loads(l, object_hook=my_hook)

1 个答案:

答案 0 :(得分:0)

您不能仅使用JSON array(例如您的示例中的object_hook)来使用JSON管理object d的反序列化,如docs

中所说
  

object_hook是一个可选函数,它将被解码的任何对象文字dict)的结果调用。将使用返回值object_hook代替dict。此功能可用于实现自定义解码器(例如JSON-RPC类提示)。

如果您确实需要处理array,则可以编写后处理功能并遍历每个节点并修改list对象。

顺便说一句objectbuilt-in的名称,所以建议您将其重命名为obj / object_ /其他。