我有一个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导致因特网上的数据传输
str(..)你不能叫json.loads一个对ScanThis对象直接.这样就行不通了.像错误说,json.loads预计一str,bytes或bytearray对象.
但是,您可以使用它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数据.
| 归档时间: |
|
| 查看次数: |
963 次 |
| 最近记录: |