0

我有一个使用 Falcon 框架的 Python 3.4 编写的 Web 服务。一种特定的方法接受 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 个月前运行良好,但目前抛出错误:“列表索引必须是整数或切片,而不是 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() 是否需要额外的参数来帮助它正确解析?还是我完全错过了其他东西?

谢谢,格雷格(P​​ython 菜鸟)

4

1 回答 1

0

返回的结果[{"w": "10.191.0.2", "c": "10.191.0.3", "l": "255.255.255.0", "t": "4"}]是一个json数组,解析成一个python列表。所以

result_json['c']

产生上述错误。也许 API 发生了变化,它现在返回一个数组,它以前返回一个 json 对象。

这应该有效:

clientIp = result_json[0]['c']
...
于 2016-09-23T00:12:17.410 回答