【发布时间】:2017-10-20 18:20:01
【问题描述】:
我正在尝试序列化一个字典(由其他字典组装而成),无论我做什么,我似乎都无法序列化这个傻瓜。 Json.dumps() 抛出一个类型错误并说它是不可序列化的。
这是 unicode 问题还是数据类型问题?一切都应该是一个字符串或整数
编辑:
更新了 JSON sn-p - 没有格式化,所以希望这次没有括号遗漏)
字典是使用 Alexa Skills Kit 的 Flask-Ask 扩展中的上下文局部变量构建的。所以,我的意思是,如果
{u'foo': u'bar'}结构中存在 unicode / 语法错误,它应该来自那里。
代码:
这是我的这个函数的代码:
print ask_version
print ask_session
print ask_request
print resp # resp is None in this case
ask_session.pop('dialogState', None)
#ask_session['new'] = str(ask_session['new'])
payload = {
"event" : {
"version": str(ask_version).encode('utf8'),
"session": ask_session,
"request": ask_request
}
}
if resp is not None:
payload['event']['response'] = json.loads(str(resp))
#payload['event']['response']['response']['shouldEndSession'] = str(payload['event']['response']['response']['shouldEndSession'])
print payload # works fine
print json.dumps(payload) # throws an error
控制台输出
1.0 {'dialogState':无,u'application':{u'applicationId':u'amzn1.ask.skill.9633f809-4141-4cf8-b5f4-5b605e597758'},u'sessionId':u'amzn1.echo-api .session.354294b7-78ce-4c47-8673-f671ecb750a6' ,u'user ':{u'userId':u'amzn1.ask.account.AGN4D7NM4VKGNCCTCMD3OWT2GR6YKIQF7TODTS4LXUW7UMEVKK6TTKC3JUM25EX3AT4W6WQYCHINGWKWV6TTTNH72U4KL4FH3LXSH3666E3YWPJMYHBDMVDMQZ5SNCIRSTL4BSOMF2V6TNH7I6T4E2NY7IMDPDIIZX3GXDYHZX2NKYELYZE5NE63LJMBAYFE3ZOMRA3F66QYMCY 'u'accessToken':u'Atza | E5dno1lo0p6579-WzNTCNaCvjZicNU-GR5BbDmNWGxjQIk -wnuopeywFQ7vJx-utWTIQrJMXh0AUWJExktH2CiwQmy19mAvaUTYtTpfxB3J5NGVcE7aeYAMenPiDtSq6yvyjLyjF6V8HqQBxRNiStieHG-YJLCW1oOWs84V143L6wcrgQv5BK-siZAJDcBK_6jiXDFE9cgfIjVpLiSyAH1IqfhJ4-9Gc5CvOAmRVsWCGgxaV-aMntA7FlOnG1eP6ilk81HWRgVuy7x7JDxMhEzkHF6l11g9jUFwtAkVIa-9wMedGG6XPFbyNlEbqa6XJuOiawHs9LYDVuAIYRrPyVrF_MANbKApRSrzAX-GFjVC3MSQU48-ySbCxSfo4D5dRlHS8c_3_cFxr8etnEX17HY5G9oC1uYGjEHuDVBUJ3FP65flxRye9zL7S3UBJBwRkxXLiC8iBifb-5sMLnKn7gw8RRe-y3cNCZnCxtmEGzSpHWscxd6v9xdxzf4BXiUaTgpI2oW6JFhXDKotdf_WY- mSsix0URJrwwicC8bQ'}, 'attributes': {'name': u'Foo Bar', 'zip': u'11205', 'userId': u'amzn1.account.AHARAFOFWT7QWD6FXOQRLZR577OA', 'tzid': u'America/New_York ', 'lat': 40.99999, 'lng': -73.99999, 'email': u'foo@bar.com'}, u'new': True} {u'locale': u'en-US', u'timestamp': u'2017-10-20T18:38:32Z', u'type': u'LaunchRequest', u'requestId': u'amzn1. echo-api.request.99b6181b-7e28-4c1d-a49d-ed1f9d0d8c8d'} 没有任何 {'event': {'session': {u'application': {u'applicationId': u'amzn1.ask.skill.9633f809-4141-4cf8-b5f4-5b605e597758'}, u'sessionId': u'amzn1 .echo-api.session.354294b7-78ce-4c47-8673-f671ecb750a6' ,u'user ':{u'userId':u'amzn1.ask.account.AGN4D7NM4VKGNCCTCMD3OWT2GR6YKIQF7TODTS4LXUW7UMEVKK6TTKC3JUM25EX3AT4W6WQYCHINGWKWV6TTTNH72U4KL4FH3LXSH3666E3YWPJMYHBDMVDMQZ5SNCIRSTL4BSOMF2V6TNH7I6T4E2NY7IMDPDIIZX3GXDYHZX2NKYELYZE5NE63LJMBAYFE3ZOMRA3F66QYMCY 'u'accessToken':u'Atza | E5dno1lo0p6579 -WzNTCNaCvjZicNU-GR5BbDmNWGxjQIk-wnuopeywFQ7vJx-utWTIQrJMXh0AUWJExktH2CiwQmy19mAvaUTYtTpfxB3J5NGVcE7aeYAMenPiDtSq6yvyjLyjF6V8HqQBxRNiStieHG-YJLCW1oOWs84V143L6wcrgQv5BK-siZAJDcBK_6jiXDFE9cgfIjVpLiSyAH1IqfhJ4-9Gc5CvOAmRVsWCGgxaV-aMntA7FlOnG1eP6ilk81HWRgVuy7x7JDxMhEzkHF6l11g9jUFwtAkVIa-9wMedGG6XPFbyNlEbqa6XJuOiawHs9LYDVuAIYRrPyVrF_MANbKApRSrzAX-GFjVC3MSQU48-ySbCxSfo4D5dRlHS8c_3_cFxr8etnEX17HY5G9oC1uYGjEHuDVBUJ3FP65flxRye9zL7S3UBJBwRkxXLiC8iBifb-5sMLnKn7gw8RRe-y3cNCZnCxtmEGzSpHWscxd6v9xdxzf4BXiUaTgpI2oW6JFhXDKotdf_WY -mSsix0URJrwwicC8bQ'}, 'attributes': {'name': u'Foo Bar', 'zip': u'11205', 'userId': u'amzn1.account.AHARAFOFWT7QWD6FXOQRLZR577OA', 'tzid': u'America/ New_York','lat':40.99999,'lng':-73.99999,'email':u'foo@bar.com'},u'new':True},'version':'1.0','request': {u'locale': u'en-US', u'timestamp': u'2017-10-20T18:38:32Z', u'type': u'LaunchRequest', u'requestId': u'amzn1. echo-api.request.99b6181b-7e28-4c1d-a49d-ed1f9d0d8c8d'}}} 2017-10-20 11:38:35,551 INFO 127.0.0.1 - - [20/Oct/2017 11:38:35] “POST /alexa/HTTP/1.1”500 - 回溯(最近一次通话最后): __call__ 中的文件“/usr/local/lib/python2.7/site-packages/flask/app.py”,第 1997 行 return self.wsgi_app(environ, start_response) wsgi_app 中的文件“/usr/local/lib/python2.7/site-packages/flask/app.py”,第 1985 行 响应 = self.handle_exception(e) 文件“/usr/local/lib/python2.7/site-packages/flask/app.py”,第 1540 行,在 handle_exception reraise(exc_type, exc_value, tb) wsgi_app 中的文件“/usr/local/lib/python2.7/site-packages/flask/app.py”,第 1982 行 响应 = self.full_dispatch_request() 文件“/usr/local/lib/python2.7/site-packages/flask/app.py”,第 1614 行,在 full_dispatch_request rv = self.handle_user_exception(e) 文件“/usr/local/lib/python2.7/site-packages/flask/app.py”,第 1517 行,在 handle_user_exception reraise(exc_type, exc_value, tb) 文件“/usr/local/lib/python2.7/site-packages/flask/app.py”,第 1612 行,在 full_dispatch_request rv = self.dispatch_request() 文件“/usr/local/lib/python2.7/site-packages/flask/app.py”,第 1598 行,在 dispatch_request 中 return self.view_functions[rule.endpoint](**req.view_args) _flask_view_func 中的文件“/usr/local/lib/python2.7/site-packages/flask_ask/core.py”,第 663 行 结果 = self._launch_view_func() 文件“/Users/Neal/Documents/repos/nealrs_heroku/application.py”,第 738 行,在启动中 dashbot(“传入”) dashbot 中的文件“/Users/Neal/Documents/repos/nealrs_heroku/application.py”,第 665 行 打印 json.dumps(有效负载) 转储中的文件“/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py”,第 244 行 返回 _default_encoder.encode(obj) 文件“/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py”,第 207 行,编码 块 = self.iterencode(o, _one_shot=True) 文件“/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py”,第 270 行,在 iterencode 返回 _iterencode(o, 0) 文件“/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py”,第 184 行,默认 raise TypeError(repr(o) + "不是 JSON 可序列化") TypeError: {u'application': {u'applicationId': u'amzn1.ask.skill.9633f809-4141-4cf8-b5f4-5b605e597758'}, u'sessionId': u'amzn1.echo-api.session.354294b7 -78ce-4c47-8673-f671ecb750a6' ,u'user ':{u'userId':u'amzn1.ask.account.AGN4D7NM4VKGNCCTCMD3OWT2GR6YKIQF7TODTS4LXUW7UMEVKK6TTKC3JUM25EX3AT4W6WQYCHINGWKWV6TTTNH72U4KL4FH3LXSH3666E3YWPJMYHBDMVDMQZ5SNCIRSTL4BSOMF2V6TNH7I6T4E2NY7IMDPDIIZX3GXDYHZX2NKYELYZE5NE63LJMBAYFE3ZOMRA3F66QYMCY 'u'accessToken':u'Atza | E5dno1lo0p6579-WzNTCNaCvjZicNU-GR5BbDmNWGxjQIk-wnuopeywFQ7vJx-utWTIQrJMXh0AUWJExktH2CiwQmy19mAvaUTYtTpfxB3J5NGVcE7aeYAMenPiDtSq6yvyjLyjF6V8HqQBxRNiStieHG -YJLCW1oOWs84V143L6wcrgQv5BK-siZAJDcBK_6jiXDFE9cgfIjVpLiSyAH1IqfhJ4-9Gc5CvOAmRVsWCGgxaV-aMntA7FlOnG1eP6ilk81HWRgVuy7x7JDxMhEzkHF6l11g9jUFwtAkVIa-9wMedGG6XPFbyNlEbqa6XJuOiawHs9LYDVuAIYRrPyVrF_MANbKApRSrzAX-GFjVC3MSQU48-ySbCxSfo4D5dRlHS8c_3_cFxr8etnEX17HY5G9oC1uYGjEHuDVBUJ3FP65flxRye9zL7S3UBJBwRkxXLiC8iBifb-5sMLnKn7gw8RRe-y3cNCZnCxtmEGzSpHWscxd6v9xdxzf4BXiUaTgpI2oW6JFhXDKotdf_WY-mSsix0URJr wwicC8bQ'}, 'attributes': {'name': u'Foo Bar', 'zip': u'11205', 'userId': u'amzn1.account.AHARAFOFWT7QWD6FXOQRLZR577OA', 'tzid': u'America/New_York ', 'lat': 40.99999, 'lng': -73.99999, 'email': u'foo@bar.com'}, u'new': True} 不是 JSON 可序列化的【问题讨论】:
-
如果这是 Python 2,您正在混合使用
str和unicode类型。 -
另外,我很确定这有不平衡的括号......
-
u 'application'(还有很多其他人)在我看来就像SyntaxError。 -
每个
u后面都有一个空格...这是语法错误... -
是的,实际上,这根本不是一个有效的 Python 文字。这是如何产生的?你是手工制作的吗?
标签: python json dictionary flask