2017-05-11 7 views
0

私は以下の '辞書'(x)を 'JSON'に変換しようとしています。しかし、次のデータはJSONのシリアライズ可能ではありません。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 

STEP 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)}} 

SOLUTION:

>>> 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}}} 

しかし、私が削除を含むときJSON配列に辞書を変換するために単独で(STEP 2)データを編、私はPythonで初心者だ次のエラー

>>> 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

すべての文字列にUnicodeを使用して、 'json'がそれらを変換する必要がないようにしてください。 –

答えて

1

datetime.datetime文字列を返さないため、json.dumpsで処理することはできません。それを変更するにはstr(datetime.datetime(2015, 6, 17, 7, 43))

関連する問題