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