微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从python中的类扩展的JSONEncoder双jsonify对象

如何解决从python中的类扩展的JSONEncoder双jsonify对象

我想从 Python 类对象中获取字典。我正在使用 JSONEncoder 来隐藏相同的内容。但是,我得到的回报是双重 jsonified 对象。我只想要一本字典。

class DocumentOverlay:
    page: int
    top: None
    left: None
    width: None
    height: None
    def __init__(self,page: int,top: None,left: None,width: None,height: None) -> None:
        self.page = page
        self.top = top
        self.left = left
        self.width = width
        self.height = height


class DSAElement:
    primaryDocument: str
    matchesWithDocument: str
    primaryDocumentOverlay: DocumentOverlay
    matchesWithDocumentOverlay: DocumentOverlay
    similarityIndex: float
    isSimilar: bool
    def __init__(self,primaryDocument: str,matchesWithDocument: str,primaryDocumentOverlay: DocumentOverlay,matchesWithDocumentOverlay: DocumentOverlay,similarityIndex: float,isSimilar: bool) -> None:
        self.primaryDocument = primaryDocument
        self.matchesWithDocument = matchesWithDocument
        self.primaryDocumentOverlay = primaryDocumentOverlay
        self.matchesWithDocumentOverlay = matchesWithDocumentOverlay
        self.similarityIndex = similarityIndex
        self.isSimilar = isSimilar


class dSAEncoder(JSONEncoder):
    def default(self,o):
        return o.__dict__

output=[]
for term,tdoc in zip(thumbnail,tdocs):           
            sim = doc.similarity(tdoc)
            if sim>0.99:
                primary_overlay=DocumentOverlay(term['page'],None,None)
                secondary_overlay=DocumentOverlay(i+1,None)
                dsa_overlay=DSAElement(term['fileName'],item['fileName'],primary_overlay,secondary_overlay,sim,True)
                output.append(dSAEncoder().encode(dsa_overlay))

我得到的回报是:

['{"primaryDocument": "Aurum1.pdf","matchesWithDocument": "Aurum2.pdf","primaryDocumentOverlay": {"page": 1,"top": null,"left": null,"width": null,"height": null},"matchesWithDocumentOverlay": {"page": 1,"similarityIndex": 0.9993153342654213,"isSimilar": true}','{"primaryDocument": "Aurum1.pdf","primaryDocumentOverlay": {"page": 2,"matchesWithDocumentOverlay": {"page": 2,"similarityIndex": 0.9983211993255433,"primaryDocumentOverlay": {"page": 21,"similarityIndex": 0.997596096801685,"primaryDocumentOverlay": {"page": 3,"matchesWithDocumentOverlay": {"page": 3,"similarityIndex": 0.9988208175324497,"primaryDocumentOverlay": {"page": 4,"matchesWithDocumentOverlay": {"page": 4,"similarityIndex": 0.9960270471399298,"isSimilar": true}']

对于如何获得这样的返回字典的任何帮助将不胜感激:

[{"primaryDocument": "test.pdf","matchesWithDocument": "test2.pdf","similarityIndex": 0.92,"isSimilar": true},....]

解决方法

使用json.loads

a = ['{"primaryDocument": "Aurum1.pdf","matchesWithDocument": "Aurum2.pdf","primaryDocumentOverlay": {"page": 1,"top": null,"left": null,"width": null,"height": null},"matchesWithDocumentOverlay": {"page": 1,"similarityIndex": 0.9993153342654213,"isSimilar": true}','{"primaryDocument": "Aurum1.pdf","primaryDocumentOverlay": {"page": 2,"matchesWithDocumentOverlay": {"page": 2,"similarityIndex": 0.9983211993255433,"primaryDocumentOverlay": {"page": 21,"similarityIndex": 0.997596096801685,"primaryDocumentOverlay": {"page": 3,"matchesWithDocumentOverlay": {"page": 3,"similarityIndex": 0.9988208175324497,"primaryDocumentOverlay": {"page": 4,"matchesWithDocumentOverlay": {"page": 4,"similarityIndex": 0.9960270471399298,"isSimilar": true}']

output = [json.loads(i) for i in a]

输出

[{'primaryDocument': 'Aurum1.pdf','matchesWithDocument': 'Aurum2.pdf','primaryDocumentOverlay': {'page': 1,'top': None,'left': None,'width': None,'height': None},'matchesWithDocumentOverlay': {'page': 1,'similarityIndex': 0.9993153342654213,'isSimilar': True},{'primaryDocument': 'Aurum1.pdf','primaryDocumentOverlay': {'page': 2,'matchesWithDocumentOverlay': {'page': 2,'similarityIndex': 0.9983211993255433,'primaryDocumentOverlay': {'page': 21,'similarityIndex': 0.997596096801685,'primaryDocumentOverlay': {'page': 3,'matchesWithDocumentOverlay': {'page': 3,'similarityIndex': 0.9988208175324497,'primaryDocumentOverlay': {'page': 4,'matchesWithDocumentOverlay': {'page': 4,'similarityIndex': 0.9960270471399298,'isSimilar': True}]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。