返回json,python的类

Dre*_*w U 0 python json

我有一个python类应该返回一个json,它看起来像这样:

class ScanThis():
    def__init__(self, test):
        data={}
        if test>5:
            data["amount"] = test
            self.json_data = json.dumps(data)
        else:
            data["fail"] = test
            self.json_data = json.dumps(data)

    def __str__(self):
        return self.json_data
Run Code Online (Sandbox Code Playgroud)

我试着像这样称呼它:

output= json.loads(ScanThis(8))
print(output["command"])
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

TypeError: the JSON object must be str, bytes or bytearray, not 'ScanThis'
Run Code Online (Sandbox Code Playgroud)

我相信我之前的clas返回一个ScanThis()类型的对象,而不是我想要的JSon.我现在想要解决这个问题,谢谢

PS:如果这段代码粗糙或无效,我很抱歉,这不是真正的代码,只是我编写的类似内容

更新:同样,这不是真正的代码,它只是实际代码的一个小基本片段.有一个很好的理由我正在使用一个类,并且使用json导致因特网上的数据传输

Wil*_*sem 7

使用 str(..)

你不能json.loads一个对ScanThis对象直接.这样就行不通了.像错误说,json.loads预计一str,bytesbytearray对象.

但是,您可以使用它str(..)来调用该__str__(self)方法,从而获取JSON数据:

output = json.loads(str(ScanThis(8)))
#                   ^ get the __str__ result 
Run Code Online (Sandbox Code Playgroud)

使用其他方法

话虽这么说,定义一个方法通常是一个更好的主意,例如to_json获取JSON数据,因为现在你已经str(..)返回了一个JSON对象.所以也许更优雅的方法是:

class ScanThis():
    def__init__(self, test):
        data={}
        if test>5:
            data["amount"] = test
            self.json_data = json.dumps(data)
        else:
            data["fail"] = test
            self.json_data = json.dumps(data)

    def to_json(self):
        return self.json_data
Run Code Online (Sandbox Code Playgroud)

并称之为:

output = json.loads(ScanThis(8).to_json())
Run Code Online (Sandbox Code Playgroud)

现在你仍然可以__str__用于其他目的.此外,通过使用to_json明确表示结果将是一个JSON字符串.使用strJSON的转换当然是没有明令禁止的,但str(..)作为一个名称,不提供有关的结果,而格式很多担保to_json(或其他类似名称)强烈暗示,你将获得JSON数据.