2016-04-18 6 views
0

私は{"Top":[{"A":1,"B":721.0,"C":false}]}という文字列をPythonコレクションに変換したいと思います。ast.literal_eval ValueError( 'malformed string')

私はこのようなast.literal_evalを使用してみました:

x = '{"Top":[{"A":1,"B":721.0,"C":false}]}' 
print ast.literal_eval(x) 

はしかし、私はこのエラーを取得しています:

File "queryFlights.py", line 19, in <module> 
    print ast.literal_eval(x) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ast.py", line 80, in literal_eval 
    return _convert(node_or_string) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ast.py", line 63, in _convert 
    in zip(node.keys, node.values)) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ast.py", line 62, in <genexpr> 
    return dict((_convert(k), _convert(v)) for k, v 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ast.py", line 60, in _convert 

    return list(map(_convert, node.elts)) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ast.py", line 63, in _convert 
    in zip(node.keys, node.values)) 
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ast.py", line 62, in <genexpr> 
    return dict((_convert(k), _convert(v)) for k, v 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ast.py", line 79, in _convert 

    raise ValueError('malformed string') 
ValueError: malformed string 

私はコレクションにその文字列を変換するにはどうすればよいですか?

+0

文字列はどこにありますか?もともとはJSON形式ですか? –

+0

Pythonには 'false'ではなく' False'があります。 – interjay

+0

'json.loads({" Top ":[{" A ":1、" B ":721.0、" C ":False}]})' – qvpham

答えて

5

falseast.literal_evalで受け付けていません。

>>> ast.literal_eval('false') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ast.py", line 80, in literal_eval 
    return _convert(node_or_string) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ast.py", line 79, in _convert 
    raise ValueError('malformed string') 
ValueError: malformed string 

False

>>> ast.literal_eval('False') 
False 

ですが、あなたはおそらく、あなたの文字列が有効なJSON(とjson.loadsは、JSON文字列を評価するためのast.literal_evalよりも高速である)のように見えるので、代わりにjson.loadsを使用したい...

>>> import json 
>>> x = '{"Top":[{"A":1,"B":721.0,"C":false}]}' 
>>> json.loads(x) 
{u'Top': [{u'A': 1, u'C': False, u'B': 721.0}]} 
関連する問題