JSON데이터 장고 DB에 저장하기

go easy on NG·2023년 3월 31일
0

Q&A

목록 보기
17/18

옵션 JSON 변환

options.json

[
  {
    "option": "인덕션"
  },
  {
    "option": "오븐"
  }
]

options.py

import json
import os

with open("options.json", "r", encoding="UTF-8") as json_data:
    options = json.load(json_data)

option_list = []
for a in options:
    option_data = {"model": "houses.Option", "fields": {"name": a["option"]}}
    option_list.append(option_data)

with open("option_list.json", "w", encoding="utf-8") as m:
    json.dump(option_list, m, ensure_ascii=False, indent=2)

코드 설명

  • import json
    같은 경로에있는 json파일을 불러온다

  • import os
    os 라이브러리 불러온다

  • with open("options.json","r", encoding = "UTF-8") as json_data : options = json.load(json_data)
    options라는 이름의 json데이터파일을 읽기모드로 열고, json데이터를 load한다

  • option_list = []
    빈 리스트를 생성한다.

  • for a in options:
    for 문으로 위에서 정의한 options를 하나씩 들어간다

  • option_data = option_data = {"model": "houses.Option", "fields": {"name": a["option"]}}
    모델은 houses.Option의 만들어진 데이터 필드에 넣어주고, 필드에 리스트에서 option이란 키의 값을 데이터로 넣어준다.

  • option_list.append(option_data)
    option_list라는 배열에 option_data 를 넣어준다.

  • with open("option_list.json", "w", encoding="utf-8") as m : json.dump(option_list, m, ensure_ascii=False, indent=2)
    open한 json파일을 json.dump를 통해 load() 함수는 읽은 데이터를 딕셔너리 자료형으로 반환.

구, 동 JSON 변환코드

dong.json

[
  {
    "code": 1111051500,
    "sido": "서울특별시",
    "gu": "종로구",
    "dong": "청운효자동",
    "lat": 37.584009,
    "lng": 126.970626
  },
  {
    "code": 1111053000,
    "sido": "서울특별시",
    "gu": "종로구",
    "dong": "사직동",
    "lat": 37.575408,
    "lng": 126.965944
  },
]

dong.py

import json

with open("dong.json", "r", encoding="UTF-8") as json_data:
    houses = json.load(json_data)

gu_list = []
dong_list = []

for dong in houses:
    flag = True
    gu_data = {"model": "houses.gu_list"}
    gu_data["fields"] = {"name": dong["gu"]}
    if gu_list:
        if dong["gu"] in [i["fields"]["name"] for i in gu_list]:
            flag = False

    gu_data["pk"] = len(gu_list) + 1

    if flag:
        gu_list.append(gu_data)

    dong_data = {"model": "houses.dong_list"}
    pk = [i["pk"] for i in gu_list if i["fields"]["name"] == dong["gu"]][0]
    dong_data["fields"] = {"gu": pk, "name": dong["dong"]}
    dong_data["pk"] = len(dong_list) + 1
    dong_list.append(dong_data)

with open("gu_list.json", "w", encoding="UTF-8") as m:
    json.dump(gu_list, m, ensure_ascii=False, indent=2)

with open("dong_list.json", "w", encoding="UTF-8") as m:
    json.dump(dong_list, m, ensure_ascii=False, indent=2)

default_data = dong_list + gu_list

with open("default_data.json", "w", encoding="UTF-8") as m:
    json.dump(default_data, m, ensure_ascii=False, indent=2)

코드 설명

  • import json
    같은 경로에있는 json파일을 불러온다

  • with open("dong.json", "r", encoding="UTF-8") as json_data:
    파일열기모드 : 파일열기모드란 파일을 Binary형태로 읽을지 아니면 인코딩단위로 읽을지, 파일을 읽을건지 쓸건지 아니면 동시에 할건지에 대한 부분을 정하것
    + r : 읽기 모드, 파일을 읽을 때 사용.
    + w : 쓰기 모드, 파일에 쓸 때 사용하며 파일이 이미 동일한 이름으로 존재한다면 덮어씀
    + a : 추가 모드, 존재하는 파일에 추가할 때 사용하며 파일이 없다면 생성

  • as json_data
    json_data라는 이름으로 저장한다.

  • houses = json.load(json_data)
    houses 변수안에 json데이터를 파이썬이 읽을수 있는 파이썬 딕셔너리 객체로 변환해준다.

  • gu_list = [] dong_list = []
    구와 동 각각 빈 리스트를 만든다

  • for dong in houses:
    for 문으로 houses라는 json데이터를 하나씩 확인한다.

  • flag = True
    gu에 있는 dong이 똑같은게 발생하면 false로 바꿔주어 중복을 방지시키는 장치

  • gu_data = {"model": "houses.gu_list"}
    gu_data라는 변수에 "models"라는 키에 "houses.gu_list" 값을 value로 주는 객체를 만든다.

  • gu_data["fields"] = {"name": dong["gu"]}
    gu_data에 field를 "name"을 dong이라는 객체에서 gu라는 키값을 가진 값들을 찾아 넣어준 객체를 넣어준다.

  • if gu_list
    만약 gu_list가 존재한다면, 만약 동의 구가

  • if flag : gu_list.append(gu_data)
    만약 flag가 true라면 gu_list 에 추가해라

  • with open("gu_list.json", "w", encoding="UTF-8") as m: json.dump(gu_list, m, ensure_ascii=False, indent=2)

profile
🐥개발자

0개의 댓글