先上代码
class to_wpf_object():
def __init__(self, word_area_list):
if word_area_list is None:
self.has_caption = False
self.word_area_list = []
return
self.has_caption = True
self.word_area_list = word_area_list
def obj_2_dict(self):
return {
'has_caption': self.has_caption,
'word_area_list': [word.obj_2_dict() for word in self.word_area_list]
}
def obj_2_json_string(self):
dict = self.obj_2_dict()
json_string = json.dumps(dict, ensure_ascii=False)
# json_string =json.dumps(self, default=obj_2_json, ensure_ascii=False)
return json_string
class word_area():
def __init__(self, unicom_area):
self.left_border = unicom_area.left_border
self.right_border = unicom_area.right_border
self.upper_border = unicom_area.upper_border
self.bottom_border = unicom_area.bottom_border
#self.alphabet_count = 1
# 图像展示的内容
self.content = unicom_area.content
def add_unicom_area(self, unicom_area):
self.left_border = min(self.left_border, unicom_area.left_border)
self.right_border = max(self.right_border, unicom_area.right_border)
self.upper_border = min(self.upper_border, unicom_area.upper_border)
self.bottom_border = max(self.bottom_border, unicom_area.bottom_border)
#self.alphabet_count = self.alphabet_count + 1
self.content = self.content + unicom_area.content
def obj_2_dict(self):
return {
'left_border':self.left_border,
'right_border': self.right_border,
'upper_border': self.upper_border,
'bottom_border': self.bottom_border,
'content': self.content
}
def to_json_string(self):
dict = {}
dict['left_border'] = self.left_border
dict['right_border'] = self.right_border
dict['upper_border'] = self.upper_border
dict['bottom_border'] = self.bottom_border
#dict['alphabet_count'] = self.alphabet_count
dict['content'] = self.content
json_string = json.dumps(dict, ensure_ascii=False)
return json_string
由于csdn的新版编辑器出bug了,就长话短说了。使用 json.dumps需要把对象整体拼成一个字典,对象中对象的value值也是一个dict或者是[{}, {}, {}...]。
千万不要先将内部的对象序列化成字符串,然后再序列化外边的对象。再复杂的结构都可以表示为一个dict,而之前不需要做任何序列化操作。