2017-01-12 5 views
2

私はflaskを持っています。場合によっては、httpヘッダーにポイントを持たないjsonメッセージを得ることができます。この場合、私はrequest.dataからメッセージを解析しようとしています。しかし、request.dataの文字列は、解析するのが本当に難しいことです。それは、このようなバイナリ文字列です:私はjson.loads()を使用しようとしているときにdictにバイナリ文字列を解析するには?

b'{\n "begindate": "2016-11-22", \n "enddate": "2016-11-22", \n "guids": ["6593062E-9030-B2BC-E63A-25FBB4723ECC", \n    "5A9F8478-6673-428A-8E90-3AC4CD764543", \n    "D8243BA1-0847-48BE-9619-336CB3B3C70C"]\n}' 

、私はこのエラーを取得しています。string(str())への変換の

TypeError: the JSON object must be str, not 'bytes' 

機能は良く機能しません。 too

'b\'{\\n "begindate": "2016-11-22", \\n "enddate": "2016-11-22", \\n "guids": ["6593062E-9030-B2BC-E63A-25FBB4723ECC", \\n    "5A9F8478-6673-428A-8E90-3AC4CD764543", \\n    "D8243BA1-0847-48BE-9619-336CB3B3C70C"]\\n}\'' 

私はPython 3を使用します。 request.dataを解析するにはどうすればよいですか?

答えて

7

だけdecodeそれjson.loadsにそれを渡す前に:

  • str = '...'リテラル= Unicode文字のシーケンス(UTF-16:

    b = b'{\n "begindate": "2016-11-22", \n "enddate": "2016-11-22", \n "guids": ["6593062E-9030-B2BC-E63A-25FBB4723ECC", \n    "5A9F8478-6673-428A-8E90-3AC4CD764543", \n    "D8243BA1-0847-48BE-9619-336CB3B3C70C"]\n}' 
    r = json.loads(b.decode()) 
    print(r) 
    {'begindate': '2016-11-22', 
    'enddate': '2016-11-22', 
    'guids': ['6593062E-9030-B2BC-E63A-25FBB4723ECC', 
        '5A9F8478-6673-428A-8E90-3AC4CD764543', 
        'D8243BA1-0847-48BE-9619-336CB3B3C70C']} 
    

    Python 3.xは種類を明確に区別しますまたはUTF-32、Pythonのコンパイル方法に依存)

  • bytes = b'...'リテラル=オクテットのシーケンス(0と255の間の整数)

Link for more info