2017-05-11 1 views
0

아래 '사전'(x)을 'JSON'으로 변환하려고합니다. 하지만 다음 데이터가 JSON 직렬 가능하지 않습니다 encounterd.Python 'utf8'코덱은 0 바이트 위치 0xcd를 디코딩 할 수 없습니다. 연속 연속 바이트가 유효하지 않습니다.

STEP : 1

>>> import json 
>>> import datetime 
>>> x={'status': 1, 'MetaInformation': {'create_time': datetime.datetime(2015, 6, 17, 7, 43),'last_saved_by': '\xcd\xf2\xbb\xa7\xcd\xf8\xc2\xe7','author': '\xcd\xf2\xbb\xa7\xcd\xf8\xc2\xe7','last_printed': datetime.datetime(2015, 6, 10, 6, 54), 'last_saved_time': datetime.datetime(2015, 6, 18, 0, 9)}} 
>>> json_data=json.dumps(x) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/json/__init__.py", line 244, in dumps 
    return _default_encoder.encode(obj) 
    File "/usr/lib/python2.7/json/encoder.py", line 207, in encode 
    chunks = self.iterencode(o, _one_shot=True) 
    File "/usr/lib/python2.7/json/encoder.py", line 270, in iterencode 
    return _iterencode(o, 0) 
    File "/usr/lib/python2.7/json/encoder.py", line 184, in default 
    raise TypeError(repr(o) + " is not JSON serializable") 
TypeError: datetime.datetime(2015, 6, 10, 6, 54) is not JSON serializable 

2 단계 : 나는이 문제를 디버깅하는 사전에서 몇 가지 필드를 제거

x={'status': 1, 'MetaInformation': {'create_time': datetime.datetime(2015, 6, 17, 7, 43),'last_printed': datetime.datetime(2015, 6, 10, 6, 54), 'last_saved_time': datetime.datetime(2015, 6, 18, 0, 9)}} 

해결책 :

>>> from bson import json_util 
>>> import json 
>>> import datetime 
>>> x={'status': 1, 'MetaInformation': {'create_time': datetime.datetime(2015, 6, 17, 7, 43),'last_printed': datetime.datetime(2015, 6, 10, 6, 54), 'last_saved_time': datetime.datetime(2015, 6, 18, 0, 9)}} 
>>> y=json.dumps(x, default=json_util.default) 
>>> print y 
{"status": 1, "MetaInformation": {"create_time": {"$date": 1434526980000}, "last_saved_time": {"$date": 1434586140000}, "last_printed": {"$date": 1433919240000}}} 

그러나 내가 제거를 포함 시켰을 때 에드 데이터 (STEP 2) 단독 JSON 배열에 사전을 변환하기 위해, 나는 다음과 같은 오류

>>> y=json.dumps(x, default=json_util.default) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/json/__init__.py", line 251, in dumps 
    sort_keys=sort_keys, **kw).encode(obj) 
    File "/usr/lib/python2.7/json/encoder.py", line 207, in encode 
    chunks = self.iterencode(o, _one_shot=True) 
    File "/usr/lib/python2.7/json/encoder.py", line 270, in iterencode 
    return _iterencode(o, 0) 
UnicodeDecodeError: 'utf8' codec can't decode byte 0xcd in position 0: invalid continuation byte 

내가 파이썬에서 안돼서을받을 수 있나요. 사전 (x)을 JSON 배열로 변환하는 데 도움이 될만한 도움이 필요하십니까?

+1

'datetime.datetime (x, x, x, x, x)'를 코드에서 문자열로 변환하십시오. 'str (datetime.datetime (2015, 6, 18, 0, 9)) ' – Cicero

+3

모든 문자열에 대해 유니 코드를 사용하여'json '이 문자열을 변환 할 필요가 없도록하십시오. –

답변

1

datetime.datetime 문자열을 반환하지 않으므로 json.dumps으로 처리 할 수 ​​없습니다. 이것을 바꾸려면 str(datetime.datetime(2015, 6, 17, 7, 43))

관련 문제