☆IT 개발 프로그램☆/Phthon

[JSon] 파이썬에서 Json 형식 데이터 처리하기 (가져오기/내보내기/업데이트)

호기심을 품고사는 중 2020. 6. 4. 15:05

Python 2.x에서는 Dictionary에 한글 데이터를 저장하는 것을 지원하지 않는다. 따라서 Json파일을 외부에 따로 만든 후, 메인 스크립트에서 해당 제이슨파일을 임포트하여 사용하는 것을 추천한다. Python 3부터는 Dictionary에 직접 저장하는 것도 가능하다.

 

1. 가져오기 IMPORT

# json_python.py
json_dict = { 'category': 'food', 'name': 'mcdonalds', 'price': '1000' }

import json_python
import json

json_dict = json.loads(json.dumps(json_python.json_dict))
print (json_dict)

{u'category': u'food', u'price': u'1000', u'name': u'mcdonalds'}

2. Json add & update

1.1 Json list에 데이터 행을 추가

# init
json_dict = { 'category': 'food', 'name': 'mcdonalds', 'price': '1000' }

# add an element to the existing list
row= { 'category': 'food', 'name': 'lotteria', 'price': '1500' }
json_dict = [json_dict, row]

# result
print(json_dict)

[{u'category': u'food', u'price': u'1000', u'name': u'mcdonalds'}, {'category': 'food', 'price': '1500', 'name': 'lotteria'}]

1.2 Json map에 데이터 행을 추가

json_dict = {
    'mcdonalds': {
        'category': 'food',
        'price': '1000'
    }
}

row = {
    'lotteria': {
        'category': 'food',
        'price': '1500'
    }
}

json_dict.update(row)
{'lotteria': {'category': 'food', 'price': '1500'}, 'mcdonalds': {'category': 'food', 'price': '1000'}}

2) Json Map에 저장된 json 행의 특정 키의 값을 바꾸고 싶다.

json_dict = {'lotteria': {'category': 'food', 'price': '1500'},
             'mcdonalds': {'category': 'food', 'price': '1000'}}
json_dict['mcdonalds']['price']='0'

json_dict
{'lotteria': {'category': 'food', 'price': '1500'}, 'mcdonalds': {'category': 'food', 'price': '0'}}

3) 특정 키 값 아래에 자식 객체 업데이트하기

json_dict = {'lotteria': {'category': 'food', 'price': '1500'},
             'mcdonalds': {'category': 'food', 'price': '1000'}}
json_dict['lotteria'].update({'location': {'prefecture': '경기도', 'city': '서울', 'zipcode': 15541}})
print (json_dict)

{'lotteria': {'category': 'food', 'price': '1500',
              'location': {'city': 'seoul', 'prefecture': 'gyounggido', 'zipcode': 15541}},
 'mcdonalds': {'category': 'food', 'price': '1000'}}

'lotteria' 객체 아래에 'location'이라는 키가 없어 새로 추가가 되었다. 이미 있을 경우, 기존 값은 완전히 사라지고 input에 의해 대체(replace)되므로 주의. key값을 지정하여 업데이트하면 해당 키 아래에 자식을 계속 추가해 나갈 수 있다.

3. 내보내기 EXPORT

import json

# Default
with open('fileName.json', 'w') as outfile:
    json.dump(json_dict, outfile)

# 원하는 인코딩에 따라 옵션 커스터마이징 가능. 한글을 그대로 저장하고 싶어 다음의 옵션을 넣었다.
with open('krVerFile.json', 'w') as outfile:
    json.dump(json_dict, outfile, ensure_ascii=False)