3. JSON 기본 문장
{ } 문장 : Key와 값이 쌍으로 구성된 문장
[ ] 문장 : 값에 들어갈 수 있는 구조로 {}문장, 다양한 데
이터타입이 들어감
{“키” : 값, “키1”: 값 ……}
[요소1,요소2 ,……]
{ } 문장
[ ] 문장
4. JSON 값 : data type
파이썬 데이터 타입과 JSON 타입 매핑
JSON 설명 Python
object 순서가 없는 키와 값의 쌍 dict
array 순서가있는 sequece들의 값 list
string 문자열 unicode
number (int) double- precision in JavaScript int, long
number (real) floating-point format in JavaScript float
true Boolean True
false Boolean False
null empty None
6. decoding
부호화(encoding) 된 것을 다시 원래의 기준으로
전환하는 것
JSON Python
object dict
array list
string unicode
number (int) int, long
number (real) float
true True
false False
null None
8. json.load() 파라미터
json.load(fp[, encoding[, cls[, object_hook[, parse_float[,
parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
parameter 설명
fp 파일명
encoding utf-8, ascii 인코딩 타입
cls 별도의 사용자 오류시 사용
object_hook
object_hook는 객체 리터럴 디코딩 (DICT)의 결과로 호출되는 선택적 기능입니다.
object_hook의 리턴 값 대신 딕셔너리로 사용된다. 이 기능은 사용자의 디코더 (를 구현하
는데 사용될 수있다.
parse_float Float 처리
parse_int Int 처리
parse_constant '-Infinity', 'Infinity', 'NaN’ 처리
object_pairs_hook
object_pairs_hook 쌍의 정렬 된 목록으로 디코딩 문자 그대로 모든 개체의 결과로 호출되
는 선택적 기능입니다. object_pairs_hook의 리턴 값 대신 딕셔너리로 사용된다. 이 기능
키 및 값 쌍 (예를 들어, collections.OrderedDict ()는 삽입의 순서를 기억한다) 복호화되는
순서에 의존 맞춤 디코더를 구현하기 위해 사용될 수있다. object_hook도 정의되어있는 경
우, object_pairs_hook은 우선합니다.
**kw 별도의 사용자 오류시 사용
9. 기본
스트림을 파일에 저장하고 다시 파이썬 처리를
위한 변환처리
f = open("file_txt1",'w+')
f.write('[{"a": "A", "c": 3.0, "b": [2, 4]}]')
f.flush()
f.seek(0)
print json.load(f)
f.close()
#결과값
[{u'a': u'A', u'c': 3.0, u'b': [2, 4]}]
11. json Module : json.loads
json.loads(s[, encoding[, cls[, object_hook[, parse_float[,
parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
parameter 설명
s string
encoding utf-8, ascii 인코딩 타입
cls 별도의 사용자 오류시 사용
object_hook
object_hook는 객체 리터럴 디코딩 (DICT)의 결과로 호출되는 선택적 기능입니다.
object_hook의 리턴 값 대신 딕셔너리로 사용된다. 이 기능은 사용자의 디코더 (를 구현하
는데 사용될 수있다.
parse_float Float 처리
parse_int Int 처리
parse_constant '-Infinity', 'Infinity', 'NaN’ 처리
object_pairs_hook 객체 변환을 위한 함수 변환 연결
**kw 별도의 사용자 오류시 사용
12. 기본
Json 형태의 스트링을 파이썬 타입으로 변환
#json --> python decoding
obj_jl = u'{"answer": [42.2], "abs": 42}'
obj_pl = json.loads(obj_jl)
print("decoding",obj_pl)
#결과값
('decoding', {u'answer': [42.2], u'abs': 42})
13. obejct_hook 처리 방식
obejct_hook 파라미터에 변환함수를 지정하고
변환하는 객체의 값을 처리
# obejct_hook 에 처리할 함수 정의
def obejct_hook _processing(obj) :
#obj를 전환
convert_obj = 처리로직
return convert_obj
json.loads(encoded_object, object_hook= obejct_hook _processing)
#json_myobj.py
class MyObj(object):
def __init__(self, s):
self.s = s
def __repr__(self):
return '<MyObj(%s)>' % self.s
encoded_object = '[{"s": "instance value goes here", "__module__": "json_myobj", "__class__": "MyObj"}]'
14. obejct_hook : 클래스 생성
JSON에 넘겨진 클래스 객체에 대해 생성
#json_myobj.py
class MyObj(object):
def __init__(self, s):
self.s = s
def __repr__(self):
return '<MyObj(%s)>' % self.s
15. obejct_hook : 함수 생성
Object_hook에 클래스 객체와 연결될 함수를 생
성
#json.obj.py
import json
def dict_to_object(d):
if '__class__' in d:
class_name = d.pop('__class__')
module_name = d.pop('__module__')
module = __import__(module_name)
#클래스 타입을 넣고
class_ = getattr(module, class_name)
print 'CLASS:', class_
#클래스 아키먼트를 가져오고
kargs = dict( (key, value) for key, value in d.items())
print 'INSTANCE ARGS:', args
#instance 생성
inst = class_(**kargs)
else:
inst = d
return inst
1. 변수 = 클래스타입을 할당
2. 변수(파라미터)에 키와 값을 가지는
파라미터를 전달시 변수명 앞예 **
를 붙이고 실행
함수 파리미터 d 에 전단됨
{"s": "instance value goes here",
"__module__": "json_myobj",
"__class__": "MyObj"}
16. obejct_hook : 실행
실행해서 인스턴스를 변수에 할당
#json.obj.py
# json 데이터
encoded_object = '[{"s": "instance value goes here", "__module__": "json_myobj", "__class__": "MyObj"}]‘
#json 데이터를 변환해서 인스턴스로 전환
myobj_instance = json.loads(encoded_object, object_hook=dict_to_object)
print type(myobj_instance), myobj_instance[0].__dict__
#결과값
CLASS: <class 'json_myobj.MyObj'>
INSTANCE ARGS: {u's': u'instance value goes here'}
<type 'list'> {'s': u'instance value goes here'}
17. obejct_hook 이용한 encoding
Unicode 처리를 함수를 이용하여 ascii 처리로 전환
#object_hook 용 함수 처리
def ascii_encode_dict(data):
ascii_encode = lambda x: x.encode('ascii')
return dict(map(ascii_encode, pair) for pair in data.items())
#json data
json_data = '{"foo": "bar", "bar": "baz"}‘
#python 스타일로 변환 unicode
print json.loads(json_data)
#python 스타일로 변환 Ascii
print json.loads(json_data, object_hook=ascii_encode_dict)
#결과값
{u'foo': u'bar', u'bar': u'baz'}
{'foo': 'bar', 'bar': 'baz'}
21. encoding
부호화(encoding)되지 않을 것을 특정 기준에 따
라 전환하는 것
Python JSON
dict object
list, tuple array
str, unicode string
int, long, float number
True true
False false
None null
23. json.dump 파라미터
json.dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8",
default=None, sort_keys=False, **kw)
parameter 설명
obj Python 스타일 객체
fp 파일명
skipkeys=False basic type (str, unicode, int, long, float, bool, None) 이 아닐 경우 오류처리
ensure_ascii=True Ascii /unicode 처리 방식
check_circular=True
거짓 인 경우, 컨테이너 유형에 대한 순환 참조 검사가 생략되며 순환 참조는 오버플로 오류
처리
allow_nan=True (nan, inf, -inf) 처리를 위해 사용
cls=None 별도의 사용자 오류시 사용
indent=None 출력하는 것에 대한 인텐트 처리
separators=None,
(item_separator, dict_separator) tuple default (', ', ': ') separators이며 공백을 제거할
경우 (',', ':') 사용
encoding="utf-8 인코딩 타입
default=None 변환함수 입력
sort_keys=False True 일 경우 sort 처리
**kw 별도의 사용자 오류시 사용
24. 기본
스트림처리를 위해 file을 사용해서 처리하고 저
장해서 처리
import json
data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 } ]
f = open("file_txt",'w')
json.dump(data, f)
f.flush()
print open(f.name, 'r').read()
#결과값
[{"a": "A", "c": 3.0, "b": [2, 4]}]
26. json.dumps
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8",
default=None, sort_keys=False, **kw)
parameter 설명
obj Python 스타일 객체
skipkeys=False basic type (str, unicode, int, long, float, bool, None) 이 아닐 경우 오류처리
ensure_ascii=True Ascii 처리 방식
check_circular=True
거짓 인 경우, 컨테이너 유형에 대한 순환 참조 검사가 생략되며 순환 참조는 오버플로 오류
처리
allow_nan=True (nan, inf, -inf) 처리를 위해 사용
cls=None 별도의 사용자 오류시 사용
indent=None 출력하는 것에 대한 인텐트 처리
separators=None,
(item_separator, dict_separator) tuple default (', ', ': ') separators이며 공백을 제거할
경우 (',', ':') 사용
encoding="utf-8” 인코딩 타입
default=None 변환함수 입력
sort_keys=False True 일 경우 sort 처리
**kw 별도의 사용자 오류시 사용
33. default 처리 흐름
Default 파라미터에는 변환함수를 지정하여 파이
썬에서 Json으로 전환될 수 있는 형태 처리 한 후
에 dumps함수가 실행
# default에 처리할 함수 정의
def default_processing(obj) :
#obj를 전환
convert_obj = 처리로직
return convert_obj
Json.dumps(obj, default=default_processing)
# 부호화 대상 파이썬 객체
obj = 파이썬 객체
34. default : 사용자정의 객체1
파이썬 타입 중 인스턴스를 default에 변환 함수
를 지정해서 json 스트링으로 변환
# 파이썬 클래스 생성
class User(object):
def __init__(self, name, password):
self.name = name
self.password = password
#파이썬 인스턴스 생성
alice = User('Alice A. Adams', 'secret')
#인스턴스 내의 속성만 전환 매소드
def jdefault(o):
return o.__dict__
# Json으로 변환
print(json.dumps(alice, default=jdefault))
#결과값
{"password": "secret", "name": "Alice A.
Adams"}
35. default : 사용자정의 객체 2
파이썬 타입 중 인스턴스를 default에 변환 함수
를 지정해서 json 스트링으로 변환
import json
class MyObj(object):
def __init__(self, s):
self.s = s
def __repr__(self):
return '<MyObj(%s)>' % self.s
obj = MyObj('instance value goes here')
def convert_to_builtin_type(obj):
print 'default(', repr(obj), ')'
# Convert objects to a dictionary of their representation
d = { '__class__':obj.__class__.__name__,
'__module__':obj.__module__,
}
d.update(obj.__dict__)
return d
#결과값
{"s": "instance value goes here",
"__module__": "__main__", "__class__":
"MyObj"}
print json.dumps(obj,
default=convert_to_builtin_type)
36. default : set type변환
파이썬 타입 중 set을 default에 변환 함수를 지
정해서 json 스트링으로 변환
# set 타입을 리스트로 전환
def jdefault_set(o):
if isinstance(o, set):
return list(o)
return o.__dict__
pets = set([u'Tiger', u'Panther', u'Toad'])
pets_js = json.dumps(pets, default=jdefault_set)
print( type(pets_js),json.dumps(pets, default=jdefault_set))) #결과값
(<type 'str'>, '["Tiger",
"Toad", "Panther"]')