Python json.loads()无法解析json字符串

时间:2016-09-22 23:40:00

标签: python-3.x falconframework

我有一个用Python 3.4编写的Web服务,它使用Falcon框架。一种特殊方法接受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",&# 34; c":" 10.191.0.3"," l":" 255.255.255.0"," t":& #34; 4"}]。我认为json.loads()是我问题的根源。 len(result_json)返回1我想要的地方4. json.loads()是否需要一个额外的参数来帮助它正确解析?或者我完全错过了其他什么?

谢谢, 格雷格(P​​ython noob)

1 个答案:

答案 0 :(得分: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']
...