python json序列化嵌套的对象

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/djshichaoren/article/details/79896858

先上代码

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,而之前不需要做任何序列化操作。



猜你喜欢

转载自blog.csdn.net/djshichaoren/article/details/79896858