개발 이야기/머신러닝, 딥러닝

[딥러닝 첫걸음] python에서 json 파일 읽기

AI 동키 2021. 3. 4. 17:41
반응형

AIMMO 라는 클라우드 소싱으로 이미지 라벨링을 할 수 있는 서비스가 있다.

여기에서 작업한 라벨링 결과물이 json파일로 추출되었다. 

그렇다면 이제 이걸 python에서 읽어야 한다.

 

json 파일이 무엇이냐?

JavaScript Object Notation (JSON)은 Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷입니다. 웹 어플리케이션에서 데이터를 전송할 때 일반적으로 사용합니다(서버에서 클라이언트로 데이터를 전송하여 표현하려거나 반대의 경우). 

JSON  Douglas Crockford가 널리 퍼뜨린 Javascript 객체 문법을 따르는 문자 기반의 데이터 포맷입니다. JSON이 Javascript 객체 문법과 매우 유사하지만 딱히 Javascript가 아니더라도  JSON을 읽고 쓸 수 있는 기능이 다수의 프로그래밍 환경에서 제공됩니다.

JSON은 문자열 형태로 존재합니다 — 네트워크를 통해 전송할 때 아주 유용하죠. 데이터에 억세스하기 위해서는 네이티브 JSON 객체로 변환될 필요가 있습니다. 별로 큰 문제는 아닌 것이 Javascript는 JSON 전역 객체를 통해 문자열과 JSON 객체의 상호변환을 지원합니다.

<from developer.mozilla.org/ko/docs/Learn/JavaScript/Objects/JSON>


JSON 형식은 기본적으로 javascript 문법의 영향을 받아 Python에서 사용하려면 Encoding, Decoding을 거쳐야 한다.

JSON 인코딩은

Python Object (Dictionary, List, Tuple 등) 를 JSON 문자열로 변경하는 것을 JSON Encoding 이라 부른다. JSON 인코딩을 위해서는 우선 json 라이브러리를 import 한 후, json.dumps() 메서드를 써서 Python Object를 문자열로 변환하면 된다.

JSON 디코딩은 

JSON 문자열을 Python 타입 (Dictionary, List, Tuple 등) 으로 변경하는 것을 JSON Decoding 이라 부른다. JSON 디코딩은 json.loads() 메서드를 사용하여 문자열을 Python 타입으로 변경하게 된다.

 

예제 코드는 아래 링크 참고

pythonstudy.xyz/python/article/205-JSON-%EB%8D%B0%EC%9D%B4%ED%83%80


COLAB에 업로드하기

자, 먼저 Colab에 json 라이브러리를 불러온 후, json 파일을 업로드 해보자.

import json
from google.colab import files
uploaded = files.upload()

파일을 선택하고, 업로드하면 올라간다. 

왼쪽 폴더 아이콘을 클릭하면 탐색기에서 파일을 볼 수 있다.

 

읽기

읽기에는 여러가지 방법이 있는 것 같다.

먼저 첫번째 방법은 pprint로 읽어보는 것이다.

from pprint import pprint 
with open('pnidx_dsc_inst.json') as data_file:
  local = json.load(data_file)

pprint(local)

요렇게하면 결과물이 나오는 것을 확인할 수 있다.

[{'annotations': [{'attributes': {},
                   'id': '57b7953c-801e-49ce-9677-59be90049d57',
                   'label': 'local_inst',
                   'points': [[346, 67], [365, 67], [365, 88], [346, 88]],
                   'type': 'bbox'},
                  {'attributes': {},
                   'id': '49fe250a-a9d0-4fdf-963a-98ebeb205662',
                   'label': 'local_inst',
                   'points': [[182, 179], [202, 179], [202, 198], [182, 198]],
                   'type': 'bbox'},
                   

 

혹은 print를 활용하여, 아래와 같이도 불러올 수 있다.

with open('pnidx_dsc_inst.json') as data_file:
  local = json.load(data_file)

print(json.dumps(json_data, indent = '\t'))

출력물

 

생성

새로운 json파일을 생성해보자.

disease = dict()
F09 = {"number":"1"}
F072 = {"number" : "2"}

disease["F09"] = F09
disease["F072"] = F072

with open('./test.json', 'w', encoding ='utf-8') as mk_f:
  json.dump(disease, mk_f, indent = '\t')

 

 

데이터 추가

json에 데이터를 추가하는 방법

#데이터 추가하기

F000 = {"number" : "3"}
disease["F000"] = F000

with open('./test.json', 'w', encoding = 'utf-8') as mk_f:
  json.dump(disease, mk_f, indent = '\t')

with open('./test.json', 'r') as f:
  json_data = json.load(f)

print(json.dumps(json_data, indent='\t'))

잘 추가 된 것을 볼 수 있다.

 

일단 이 정도면 감은 잡은 것 같다.

 

 

더 자세한 내용은 아래 공식 문서를 참고해 보자.

docs.python.org/ko/3/library/json.html

너무 잘 설명해주신 블로거님, 선배님, 선생님,

davinci-ai.tistory.com/44

 

이제 남은 질문은

json 데이터를 어떻게 활용할 것인가?

내가 가진 json데이터의 타입을 딥러닝에 어떻게 활용할 것인가?

 

 

 

반응형