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

问题描述:

我有一个使用Falcon框架在Python 3.4中编写的Web服务。一个特定的方法接受一个json值的文章。我的代码:Python json.loads()无法解析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']) 

此代码是工作的罚款8个月前,但目前引发错误:“列表索引必须是整数或片,不海峡。”我认为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()来帮助它正确解析?或者我完全错过了其他的东西?

谢谢, 格雷格(P​​ython的小白)

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

该诀窍。谢谢。我觉得这很简单。 –

+0

这也可能意味着在某些情况下有多个结果,所以您可能需要遍历'result_json'并从每个'dict'中获取''c''的值。如果您只是在索引0处编制索引,则不会知道是否遗漏了其他可能重要的数据。 – ShadowRanger

+0

好点,虽然我控制传入的请求,所以我知道它只是一个单一的项目。 –