Javascript simplejson的JSON序列化错误
我有以下代码:Javascript simplejson的JSON序列化错误,javascript,python,json,Javascript,Python,Json,我有以下代码: data = {'services': [u'iTunes'], 'orders': [u'TestOrder', u'Test_April_Titles_iTunes'], 'providers': ''} return HttpResponse(simplejson.dumps(data)) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2
data = {'services': [u'iTunes'],
'orders': [u'TestOrder', u'Test_April_Titles_iTunes'],
'providers': ''}
return HttpResponse(simplejson.dumps(data))
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py" in default
178. raise TypeError(repr(o) + " is not JSON serializable")
Exception Type: TypeError at /reports/change_dropdown/
Exception Value: [u'iTunes'] is not JSON serializable
我需要做什么来序列化这本词典,并在其中列出一个列表?从
unicode
转换到str
在这里工作:
data['services'] = [str(item) for item in data['services']]
data['orders'] = [str(item) for item in data['orders']]
data['providers'] = [str(item) for item in data['providers']]
问题在于
itunes
是一种不兼容JSON的类型
要解决此问题,请在序列化时提供默认类型以转换不兼容JSON的类型:
simplejson.dumps(data, default=str))
甚至:
def handler(val):
if isinstance(val, unicode)
return str(val)
else:
return val
simplejson.dumps(data, default=handler))
第二个选项的优点是可以处理集合(例如,转换为列表)、日期(例如,转换为int-timetstamp)等。JSON可以很好地处理unicode。我认为你的类型不是unicode;也许它们是BeautifulSoup Navigablettext实例?尝试将它们转换为
unicode()
。。下次您肯定要检查它们的type()
。即使您使用的格式(或库)不处理Unicode,如果您有任何非ASCII字符串,您也决不希望将Unicode
转换为str
。如果您知道字符集是什么,请使用item.encode('UTF-8')
(或其他任何形式)。如果您不知道字符集是什么…您可能想使用'unicodescape'
,这样您就可以通过一个8位管道将其导入并在另一端恢复。您使用的是什么版本的simplejson
?我很确定这个Unicode支持是很久以前添加的。更重要的是,为什么要使用simplejson
而不是2.7?中内置于stdlib的版本json
。