2017-12-28 6 views
-1

내 프로그램에서 JSON에 문제가 있습니다. 파이썬에서 인터페이스로 객체를 만듭니다. 이 개체의 목록을 JSON에서 생성 한 파일에 저장하려고합니다.Python : JSON 목록에 객체 추가

JSON이 있습니다 :

[ 
    { 
     "__class__": "Regle", 
     "apartirde": "", 
     "prefix": "", 
     "postfix": "", 
     "extension": "", 
     "amorce": "", 
     "nomfichier": "" 
    } 
] 
[ 
    { 
     "__class__": "Regle", 
     "apartirde": "", 
     "prefix": "", 
     "postfix": "", 
     "extension": "", 
     "amorce": "", 
     "nomfichier": "" 
    } 
] 

그러나 나는 그런 일을합니다 :

[ 
    { 
     "__class__": "Regle", 
     "apartirde": "", 
     "prefix": "", 
     "postfix": "", 
     "extension": "", 
     "amorce": "", 
     "nomfichier": "" 
    }, 
    { 
     "__class__": "Regle", 
     "apartirde": "", 
     "prefix": "", 
     "postfix": "", 
     "extension": "", 
     "amorce": "", 
     "nomfichier": "" 
    } 
] 

나는이 목록을 읽고 싶어 할 때, JSON은 나에게이 오류 출력하기 때문에 :

json.decoder.JSONDecodeError: Extra data:

쓰기 내 코드 편집 :

def seria(self, obj): 
    if isinstance(obj, class_Regle.Regle): 
     return {"__class__": "Regle", 
       "apartirde": obj.apartirde, 
       "prefix": obj.prefix, 
       "postfix": obj.postfix, 
       "extension": obj.extension, 
       "amorce": obj.amorce, 
       "nomfichier": obj.nomfichier} 
    raise TypeError(repr(obj) + " n'est pas sérialisable !") 

def sauvegarder(self): 
    with open(self.fichier,'a', encoding='utf-8') as mon_fichier: 
      mon_fichier.json.dump(self.regle, mon_fichier, indent=4, default=self.seria) 

내 코드 읽기 :

def charger(self): 
     with open(self.fichier, 'r', encoding="utf-8") as mon_fichier: 
      data =json.load(mon_fichier, object_hook=self.deseria) 

def deseria(self, obj_dict): 
     if obj_dict["__class__"] == "Regle": 
      obj = class_Regle.Regle(obj_dict["apartirde"], obj_dict["prefix"],obj_dict["postfix"],obj_dict["extension"],obj_dict["amorce"],obj_dict["nomfichier"]) 
      self.regle.append(obj) 
+4

관련 코드를 – Noa

+0

@Noa 완료하십시오. – jojoboue

+0

파일을 추가 모드로 여는 이유는 무엇입니까? json 파일을 원하는 것을 나타내는 객체 (이 경우 사전 목록)를 만든 후에 단일'json.dump'를 수행해야합니다. –

답변

0
def sauvegarder(self): 
    with open(self.fichier, 'r', encoding="utf-8") as mon_fichier: 
     data =json.load(mon_fichier, object_hook=self.deseria) 
    with open(self.fichier,'w', encoding='utf-8') as mon_fichier: 
      json.dump(self.regle, mon_fichier, indent=4, default=self.seria) 

안녕하세요, 이건 내 문제의 솔루션입니다. Patrick Haugh에게 감사드립니다. 제게 올바른 길을 제시해주세요!