Python json.loads() 无法解析 json 字符串
Python json.loads() failing to parse json string
我有一个用 Python 3.4 编写的 Web 服务,它使用 Falcon 框架。一种特定方法接受 post 个 json 值。我的代码:
try:
raw_json = req.stream.read()
except Exception as ex:
raise falcon.HTTPError(falcon.HTTP_400, 'Error', ex.message)
try:
result_json = json.loads(raw_json.decode('utf-8'))
except ValueError:
raise falcon.HTTPError(falcon.HTTP_400,
'Malformed JSON', 'Could not decode the request body. The JSON was incorrect.')
clientIp = result_json['c']
wpIp = result_json['w']
lan = result_json['l']
table = int(result_json['t'])
此代码在 9 个月前运行良好,但目前抛出错误:"list indices must be integers or slices, not str." 我认为它可能在 Python 或 Falcon 软件包更新后损坏。
raw_json.decode('utf-8') 的输出看起来没问题,返回 [{"w": "10.191.0.2", "c": "10.191.0.3", "l":“255.255.255.0”,"t":“4”}]。我认为 json.loads() 是我问题的根源。 len(result_json) 在我期望返回 4 的地方返回 1。json.loads() 是否需要额外的参数来帮助它正确解析?还是我完全错过了其他东西?
谢谢,
格雷格(Python 菜鸟)
返回结果[{"w": "10.191.0.2", "c": "10.191.0.3", "l": "255.255.255.0", "t": "4"}]
为json数组,解析为python列表。因此
result_json['c']
产生上述错误。也许 API 发生了变化,它现在 returns 一个数组,它以前返回一个 json 对象。
这应该有效:
clientIp = result_json[0]['c']
...
我有一个用 Python 3.4 编写的 Web 服务,它使用 Falcon 框架。一种特定方法接受 post 个 json 值。我的代码:
try:
raw_json = req.stream.read()
except Exception as ex:
raise falcon.HTTPError(falcon.HTTP_400, 'Error', ex.message)
try:
result_json = json.loads(raw_json.decode('utf-8'))
except ValueError:
raise falcon.HTTPError(falcon.HTTP_400,
'Malformed JSON', 'Could not decode the request body. The JSON was incorrect.')
clientIp = result_json['c']
wpIp = result_json['w']
lan = result_json['l']
table = int(result_json['t'])
此代码在 9 个月前运行良好,但目前抛出错误:"list indices must be integers or slices, not str." 我认为它可能在 Python 或 Falcon 软件包更新后损坏。
raw_json.decode('utf-8') 的输出看起来没问题,返回 [{"w": "10.191.0.2", "c": "10.191.0.3", "l":“255.255.255.0”,"t":“4”}]。我认为 json.loads() 是我问题的根源。 len(result_json) 在我期望返回 4 的地方返回 1。json.loads() 是否需要额外的参数来帮助它正确解析?还是我完全错过了其他东西?
谢谢, 格雷格(Python 菜鸟)
返回结果[{"w": "10.191.0.2", "c": "10.191.0.3", "l": "255.255.255.0", "t": "4"}]
为json数组,解析为python列表。因此
result_json['c']
产生上述错误。也许 API 发生了变化,它现在 returns 一个数组,它以前返回一个 json 对象。
这应该有效:
clientIp = result_json[0]['c']
...