코딩일기

json.decoder.jsondecodeerror: expecting property name enclosed in double quotes: line 1 column 2 (char 1) attributeerror: 'str' object has no attribute 'read' json read 오류 ( feat. json json.loads json.dumps ast.literal_eval ) 본문

카테고리 없음

json.decoder.jsondecodeerror: expecting property name enclosed in double quotes: line 1 column 2 (char 1) attributeerror: 'str' object has no attribute 'read' json read 오류 ( feat. json json.loads json.dumps ast.literal_eval )

daje 2022. 10. 13. 12:36
728x90
반응형

안녕하십니까 다제 입니다. 

 

오늘은 json load 시, 발생되는 에러에 대해서 살펴보고 이를 해결하는 방법에 대해서 정리해보았습니다. 

 

jsonl 파일에서 한줄 한줄을 json으로 불러오는 과정에서 이러한 이슈가 발생되었습니다. 

json.decoder.jsondecodeerror: expecting property name enclosed in double quotes: line 1 column 2 (char 1)
attributeerror: 'str' object has no attribute 'read'

이러한 문제가 발생된 원인은 제가 가지고 있는 데이터에서 '"#@이름#@" 아~ 오늘 어디가지?' 라는 데이터들이 있는 이러한 데이터들 때문에 load되다가 중간중간에 에러가 발생되는 현상이 일어났습니다. 

 

이러한 이슈를 해결하기 위해서는 ast.literal_eval이라는 것을 사용하면 됩니다. 

예시 코드를 보여드리겠습니다. 

 

def json_load_func(self):
    train_dataset_path = "train path 경로"
    valid_dataset_path = "valid path 경로"

    with open(train_dataset_path, 'r') as train_dataset_files:
        train_dataset = json.loads(train_dataset_files.read())

    with open(valid_dataset_path, 'r') as valid_dataset_files:
        valid_dataset = json.loads(valid_dataset_files.read())

    all_data = train_dataset["train"] + valid_dataset["valid"]

    all_dialogues = []

    for obj in tqdm(all_data):
        dialogue = ast.literal_eval(obj)["dialog"]

 

이렇게 간단하게 처리하면 json file을 불러올 수 있습니다. 

 

감사합니다. 

728x90
반응형
Comments