본문 바로가기
프로그래밍/파이썬(python)

[파이썬] xml 형식 json, dictionary 제이슨, 딕셔너리 형식으로 변환

by 졸린이 2021. 10. 6.
반응형

티스토리 api를 사용하여 자동 글쓰기 하는 프로그램을 파이썬으로 만들고 있었다.

 

post 타입으로 요청을 보내서 아무튼 응답을 받으면 아래와 같이 xml 타입으로 받는다.

 

아래에 있는 글을 json으로 변환해 보려 한다.

<tistory><status>200</status><postId>186</postId><url>https://hellodoor.tistory.com/186</url></tistory>

 

status 200은 성공

postId는 186

나는 여기서 postId값이 필요하다.

 

문자열을 postId기준으로 뭐 잘라서 값을 가져올 수도 있고 다른 방법도 있겠지만 다루기 쉬운 json 타입으로 변환하려 한다.

 

아 그리고 몰랐던 건데 파이썬에선 dictionary 타입으로 부른 것을 알았다. json 처럼 key value로 이루어져 있고 형태도 거의 비슷한데 dictionary라고 한단다.

 

뭐 아무튼 일단 코드로 보자면 

import xmltodict

xmltodict이란 모듈을 import 해야한다.

xml to dictionary 인 듯 하다. 명령 프롬프트(cmd)에서 pip install xmltodict 명령어를 입력해줘야 한다.

 

$ pip install xmltodict  혹은 $ conda install xmltodict (아나콘다로 파이썬을 설치했을 경우)

1
2
3
4
5
6
7
8
9
10
response = requests.post(url, params=param)
 
xmlData = response.text
 
jsonStr = json.dumps(xmltodict.parse(xmlData), indent=4)
 
dict = json.loads(jsonStr)
 
print(dict['tistory'])
print(dict['tistory']['postId'])
cs

line3 : response.text 에 원하는 데이터가 xml 형식으로 담겨 있다.

 

line5 : json.dumps(xmltodict.parse() xml을 json으로 변환한다. parse()에 xml을 집어넣는다.

 

line7 : json.loads() 함수에 json으로 변환한 값을 넣어 줘야 9행이나 10행처럼 key 값으로 접근이 가능하다.

7행을 생략하면

string indices must be integers 이런 에러가 뜬다. 문자로 접근하지 않을거면 json을 쓰는 이유가 거의 없다.

 

3행에서 xml 파일을 읽어와서 넣어도 된다. indent=4를 적어 print() 했을 때 보기 좋게 할 수 있다. 사실 뭐 안해도 무방.

5행에서 아래 출력문이 indent=4를 넣은 값이고 위는 생략한 것이다. 보기 편하게 하는 것 뿐이다.

 

자바 스크립트에선 json data를 사용할 때 json.key 이런식으로 .뒤에 key 값을 입력하여 사용하곤 한다. (객체)

 

python 에서는 dictionary["key"] 이렇게 배열처럼 접근하여 사용한다.

 

아무튼 변환을 마치고

print(dict['tistory'])

print(dict['tistory']['postId'])

로 출력해서 원하는 186을 추출할 수 있었다. url이 필요하면 dict['tistory']['url'] 해도 된다.

 

반응형

댓글