Python json.loads()解析json字符串失败



我有一个用Python 3.4编写的web服务,它使用了Falcon框架。一个特殊的方法接受json值的post。我的代码:

    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)返回1,我期望4。是否需要一个额外的参数来帮助json.loads()正确解析?还是我完全错过了什么?

谢谢,Greg (Python新手)

返回结果[{"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']
...

相关内容

  • 没有找到相关文章

最新更新