我们如何在类构造函数中直接使用json.dumps,而不是通过单独的函数调用它



我们如何在构造函数中直接使用json.dumps,而不是通过单独的函数调用它?

def json_serialize(obj, *args):
return json.dumps(obj)
class KafkaProducer(object):
def __init__(self, config):
config = {
"key.serializer": json_serialize,
"value.serializer": json_serialize,
}
self.producer = SerializingProducer(config)
def produce(self, *args, **kwargs):
self.producer.produce(*args, **kwargs)
self.producer.flush()

当我使用KafkaProducer类的production方法时,它与上面的实现一起工作。由于json_serialize函数仅用于执行json.dumps(obj)

如果我在下面给出的KafkaProducer中直接使用json.dumps进行尝试,然后调用production类的方法,它将不起作用。给出错误为:


KafkaError{code=_KEY_SERIALIZATION,val=-162,str="dumps() takes 1 positional argument but 2 were given"}
class KafkaProducer(object):
def __init__(self, config):
config = {
"key.serializer": json.dumps,
"value.serializer": json.dumps,
}
self.producer = SerializingProducer(config)
def produce(self, *args, **kwargs):
self.producer.produce(*args, **kwargs)
self.producer.flush()

好吧,你不能。key.serializervalue.serializer函数必须具有以下签名:Callable(obj, SerializationContext) -> bytesjson.dumps不接受SerializationContext作为参数,所以需要使用一些包装器。这就是为什么需要json_serialize函数。

最新更新