decoding / encoding

일을 시작하고 맡은 일 중 첫번째까 api를 통해 나온 데이터를 jpg로 바꾸는 일이었다.

우선 데이터가 base64로 되어있는 이미지였기 때문에 base64를 import 했다.
근데 문제는 데이터가 오브젝트 안에 오브젝트의 리스트에 있었다.
그래서 빼내오는 것이 난감했다.

k = {"result": {"code": "", "extraMessage": "", "message": "성공", "transactionId": ""}, "data": {
    "resRegisterEntriesList": [{"resAttachDocument": ""},

이런 형태였다.

import base64

b = k['data']["resRegisterEntriesList"]

for num, i in enumerate(b):
    f = open("text{}.jpg".format(num+1), "wb")
    f.write(base64.b64decode(i["resAttachDocument"]))
    f.close()

그래서 이렇게 뽑아오기로 했다.

근데 문제는 response가 나오는데 시간이 걸려서 바로 이걸 실행하면 jpg로 나오지 않는다는 것이다. (이미 나온 걸 response = 처럼 변수에 할당한 건 지연시간이 없으니까 jpg로 나올 수 있다..)

그래서 앞으로 해결해야하긴 하는데
1. max time을 줘서 시간을 기다리게 한다음 jpg로 뽑아낸다.

음... 이거 외에는 아직은 방법을 모르겠다.
더 찾아봐야겠다.


2. 데이터를 json으로 저장할 때 한글이 그대로 저장하는 법

res = {"result": {"code": "", "extraMessage": "", "message": "성공", "transactionId": ""}, "data": {"resRegisterEntriesList": [{"resDocTitle": "(말소사항 포함) - 집합건물", "resRealty": "경기도 ", ....

다음과 같이 그대로 txt 파일로 저장하고 싶었다.

# -*- coding: utf-8 -*-
import json

with open('convert.txt', 'w', encoding="utf-8") as convert_file:
    convert_file.write(json.dumps(res, ensure_ascii=False))

해결 방법은 간단했다.
# -*- coding: utf-8 -*- 이걸 맨 위에다가 적어줘야한다.
그리고 ensure_ascii=False 이걸 써줘야 유니코드로 변환되서 저장되는 것을 막을 수 있다. 자세히 설명하자면,

위 사진을 보면 ensure_ascii 파라미터가 기본적으로 True인걸 볼 수 있다. 그래서 이 파라미터를 False로 바꿔주게 되면 문자가 그대로 출력될 수 있게 된다.

그럼 convert.txt라는 파일이 w(쓰기) 모드로 encoding되는데, 이걸 convert_file이라고 명명했다.
이 convert_file을 json으로 dump해서 write(쓰기)하는데, res라고 변수 지정한 것을 쓴다. 근데 ascii로 변환하는 것을 막는다.

{"result": {"code": "", "extraMessage": "", "message": "성공", "transactionId": ""}, "data": {"resRegisterEntriesList": [{"resDocTitle": "(말소사항 포함) - 집합건물", "resRealty": "경기도 ", 

그럼 결과물이 제대로 나오는 것을 볼 수 있다.


https://medium.com/@maxtortime_88708/%ED%8C%8C%EC%9D%B4%EC%8D%AC-json-%EB%AA%A8%EB%93%88-%EC%82%AC%EC%9A%A9%EC%8B%9C-%EC%A3%BC%EC%9D%98%EC%A0%90-92b626ebcfe2

좋은 웹페이지 즐겨찾기