问题描述
我想从 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}]