记python中json反序列化的一次问题解决

本文介绍了一个在使用Tornado框架处理POST请求时遇到的JSON反序列化问题,详细展示了错误日志,并提供了解决方案,即通过调整json.loads()函数参数来成功解析不规范的JSON数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安利一篇我翻译的国外大牛的神经网络入门文章

最新在tornado接收body为json数据时,进行json的反序列化时候遇到一个问题,输入如下:

 body='{\n\t"pts":[\n\t\t{\n\t\t\t"ddlSqls":"create table user1(ID Varchar(20) NOT NULL, name Varchar(20))",\n\t\t\t"type":"CREATE"\n\t\t},\n\t\t{\n\t\t\t"tbName":"user1",\n\t\t\t"ddlSqls":"add column age int,drop column name",\n\t\t\t"type":"ALERT"\n\t\t},\n\t\t]\n}'

这里直接调用json.loads(body, encoding='utf-8')会产生如下异常:

HTTPRequest(protocol='http', host='10.185.81.201:8888', method='POST', uri='/db/chenwenquan/ddl/batch', version='HTTP/1.1', remote_ip='10.75.139.125', body='{\n\t"pts":[\n\t\t{\n\t\t\t"ddlSqls":"create table user1(ID Varchar(20) NOT NULL, name Varchar(20))",\n\t\t\t"type":"CREATE"\n\t\t},\n\t\t{\n\t\t\t"tbName":"user1",\n\t\t\t"ddlSqls":"add column age int,drop column name",\n\t\t\t"type":"ALERT"\n\t\t},\n\t\t]\n}', headers={'Origin': 'chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop', 'Content-Length': '222', 'Accept-Language': 'zh-CN,zh;q=0.8', 'Accept-Encoding': 'gzip, deflate', 'Host': '10.185.81.201:8888', 'Accept': '*/*', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36', 'Connection': 'keep-alive', 'Cache-Control': 'no-cache', 'Content-Type': 'application/json', 'Postman-Token': '65530e42-6a55-ad55-f91c-1ee81808cacc'})
Traceback (most recent call last):
  File "/usr/lib/python2.6/site-packages/tornado/web.py", line 1073, in wrapper
    return method(self, *args, **kwargs)
  File "/usr/lib/python2.6/site-packages/tornado/gen.py", line 104, in wrapper
    gen = func(*args, **kwargs)
  File "/opt/letv/mcluster-manager/api/handlers/database.py", line 45, in post
    body = json.loads(self.request.body, encoding='utf-8')
  File "/usr/lib64/python2.6/json/__init__.py", line 318, in loads
    return cls(encoding=encoding, **kw).decode(s)
  File "/usr/lib64/python2.6/json/decoder.py", line 319, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib64/python2.6/json/decoder.py", line 336, in raw_decode
    obj, end = self._scanner.iterscan(s, **kw).next()
  File "/usr/lib64/python2.6/json/scanner.py", line 55, in iterscan
    rval, next_pos = action(m, context)
  File "/usr/lib64/python2.6/json/decoder.py", line 183, in JSONObject
    value, end = iterscan(s, idx=end, context=context).next()
  File "/usr/lib64/python2.6/json/scanner.py", line 55, in iterscan
    rval, next_pos = action(m, context)
  File "/usr/lib64/python2.6/json/decoder.py", line 219, in JSONArray
    raise ValueError(errmsg("Expecting object", s, end))
ValueError: Expecting object: line 12 column 3 (char 219)

解决方式采用如下的方式

json.loads(body, strict=False, encoding='utf-8')
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值