2016-09-22 4 views
0

私はFalconフレームワークを使用するPython 3.4で書かれたWebサービスを持っています。 1つの特定のメソッドは、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']) 

このコードは、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()が正しく解析するために必要な追加パラメータがありますか?あるいは、私は何か完全に欠けていますか?

おかげで、 グレッグ(Pythonのnoobの)

答えて

0

返される結果[{"w": "10.191.0.2", "c": "10.191.0.3", "l": "255.255.255.0", "t": "4"}]はPythonのリストに解析されたJSON配列です。したがって、

result_json['c'] 

が上記のエラーを生成します。おそらくAPIに変更があり、以前はjsonオブジェクトを以前に返した配列を返します。

これは動作するはずです:

clientIp = result_json[0]['c'] 
... 
+0

トリックをしました。ありがとう。私はそれが何か単純だと思った。 –

+0

場合によっては複数の結果があることもありますので、 'result_json'を繰り返し、' dict'のそれぞれから 'c 'の値を取得することができます。インデックス0でインデックスするだけであれば、おそらく重要なデータを見逃したかどうかはわかりません。 – ShadowRanger

+0

良い点ですが、着信要求も制御していますが、単なる単品であることがわかります。 –

関連する問題