简体   繁体   English

JSONEncoder double jsonify 从 python 中的 class 扩展的对象

[英]JSONEncoder double jsonify objects extending from a class in python

I want to get a dictionary out of a Python class object.我想从 Python class object 中取出字典。 I'm using JSONEncoder to covert the same.我正在使用 JSONEncoder 来隐藏相同的内容。 However, what I am getting in return is double jsonified object.但是,我得到的回报是双重 jsonified object。 All i want is a dictionary.我想要的只是一本字典。

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, None, None)
                secondary_overlay=DocumentOverlay(i+1, None, None, None, None)
                dsa_overlay=DSAElement(term['fileName'], item['fileName'], primary_overlay, secondary_overlay, sim, True)
                output.append(dsaEncoder().encode(dsa_overlay))

What i get in return is:我得到的回报是:

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

Any help would be highly appreciated on how to get the return dict like this:关于如何获得这样的返回字典的任何帮助将不胜感激:

[{"primaryDocument": "test.pdf", "matchesWithDocument": "test2.pdf", "primaryDocumentOverlay": {"page": 1, "top": null, "left": null, "width": null, "height": null}, "matchesWithDocumentOverlay": {"page": 2, "top": null, "left": null, "width": null, "height": null}, "similarityIndex": 0.92, "isSimilar": true},....]

Use json.loads使用json.loads

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

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

output output

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM