diff --git a/IPython/utils/jsonutil.py b/IPython/utils/jsonutil.py index ccae2ea..26cd389 100644 --- a/IPython/utils/jsonutil.py +++ b/IPython/utils/jsonutil.py @@ -12,6 +12,7 @@ #----------------------------------------------------------------------------- # stdlib import re +import sys import types from datetime import datetime @@ -121,14 +122,17 @@ def json_clean(obj): """ # types that are 'atomic' and ok in json as-is. bool doesn't need to be # listed explicitly because bools pass as int instances - atomic_ok = (basestring, int, float, types.NoneType) + atomic_ok = (unicode, int, float, types.NoneType) # containers that we need to convert into lists container_to_list = (tuple, set, types.GeneratorType) if isinstance(obj, atomic_ok): return obj - + + if isinstance(obj, bytes): + return obj.decode(sys.getdefaultencoding(), 'replace') + if isinstance(obj, container_to_list) or ( hasattr(obj, '__iter__') and hasattr(obj, 'next')): obj = list(obj)