"NameError: name 'encode' is not defined "尝试将对象格式化为 JSON 时。如果我尝试使用JSONEncoder也这样做,我会遇到问题



我正试图通过创建一个函数将一个对象转换为json格式,该函数首先将该对象转换为字典,然后可以将该字典格式化为json。我还尝试将第一个脚本中的两个函数分离为两个不同的类。因此,一个类的函数将对象作为字典返回,另一个类提供条件语句。尽管这也不起作用。顺便说一句,这不包括在内。

import json
class person:
def __init__(self, name, age):
self.name = name
self.age = age

bob = person("Bob", 5)

class encode_Obj:
def encode(x):
if isinstance(x, person):
return {"name": x.name, "age": x.age}
else:
raise TypeError("Object of type user is not JSON serializable")

bob_JSON = json.dumps(bob, default=encode)
print(bob_JSON)

我也完全放弃了这个想法,而是尝试使用JSONEncoder,但它给了我";TypeError:person类型的对象不可JSON序列化"如果格式化为json的内容不是字典,而只是一个普通对象,则会出现相同的错误。需要注意的是,返回的格式不一定是字典,例如可以是列表。

import json
from json import JSONEncoder
class person:
def __init__(self, name1, age1):
self.name1 = name1
self.age1 = age1
bob = person("Bob", 5)

class obj_to_json(JSONEncoder):
def default(self,x):
if isinstance(x, person):
return {"name": x.name1, "age": x.age1}
return super().default(x)
bob_JSON = json.dumps(bob, cls=obj_to_json)
print(bob_JSON)

请随时询问任何需要的澄清。

谢谢。

子类JSONEncoder的正确方法是覆盖default。(encoder不是一个现有的方法;它没有覆盖任何内容,因此没有被使用。(

class obj_to_json(JSONEncoder):
def default(self, x):
if isinstance(x, person):
return {"name": x.name1, "age": x.age1}
return super().default(x)

第一次尝试使用encode_Obj时遇到了两个问题:一是尝试使用名为encode的函数,而不是encode_Obj类的实例方法;第二,调用函数,并将其返回值作为default参数传递,而不是传递函数本身。相反,尝试

def encode(x):
if isinstance(x, person):
return {"name": x.name, "age": x.age}
else:
raise TypeError("Object of type user is not JSON serializable")

bob_JSON = json.dumps(bob, default=encode)

最新更新