2017-06-27 17 views
0

下の文字列からentryの値を抽出しようとしています。私はjson.loads()で文字列を解析しようとしましたが、動作しません。代わりに、以下のエラーメッセージが表示されます。JSON文字列の解析値が正しくありません

これは文字列です:

output = '336,{"token":"eyJhbGc.iOiJIUzI18_YREPr50","entry":"961156ef-2a9","project":"86a8e55a-9160","tenant":["73426ca1-bde"]}' 

これは私のコードです:

entry_id = json.loads(output)["entry"] 

これはエラーメッセージです:

File "C:\Python27\lib\json\__init__.py", line 339, in loads 
    return _default_decoder.decode(s) 
File "C:\Python27\lib\json\decoder.py", line 367, in decode 
    raise ValueError(errmsg("Extra data", s, end, len(s))) 
ValueError: Extra data: line 1 column 4 - line 1 column 341 (char 3 - 340) 

私はこの問題を解決するために何ができますか?

答えて

1

{...} -partのみがJSONオブジェクトで、その値を抽出できます。解析する前に文字列を分割する必要があります。 (あなたは、最初のカンマでのみ分割するオプションmaxsplitの引数を追加する必要があります。)

例:

x, s = output.split(',', 1) 
entry_id = json.loads(s)["entry"] 

そのコンマの前の数字は、それ自体で有効なJSON値ですが、カンマ区切り値のみが許可されていますJSON配列[...]またはJSONオブジェクト{...}内にあります。したがって、エラーメッセージには、そこに属していない入力文字列に余分なデータがあることが示されます。したがって、文字列の残りの部分に含まれるオブジェクトを解析する前に、値を取り除く必要があります。参考のため

0

まず、有効なJSON文字列を取得し、JSON文字列から値を取得するためにjson.loads()を使用する最初の4つの文字を削除します。

# remove first four characters 
line = output[4:] 
# parse a value from json to get id 
entry_id = json.loads(line)["entry"] 
print entry 

出力:

961156ef-2a9 
関連する問題