ast.literal_eval ValueError ('missformed string')

2016-04-18 10 views
0

Ich habe eine Zeichenfolge der Form {"Top":[{"A":1,"B":721.0,"C":false}]}, die ich in eine Python-Sammlung konvertieren möchte.ast.literal_eval ValueError ('missformed string')

Ich versuchte ast.literal_eval wie folgt aus:

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

Allerdings bin ich diesen Fehler:

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 

Wie kann ich diese Zeichenfolge in eine Sammlung umwandeln?

+0

Woher bekommen Sie die Zeichenfolge? War es ursprünglich im JSON-Format? –

+0

Python hat 'Falsch', nicht' Falsch'. – interjay

+0

'json.loads ({" Oben ": [{" A ": 1," B ": 721.0," C ": Falsch}]})' – qvpham

Antwort

5

false wird von ast.literal_eval nicht akzeptiert.

>>> 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 ist

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

aber Sie wollen wahrscheinlich json.loads stattdessen verwenden, da die Zeichenfolge wie gültig json aussieht (und json.loads ist schneller als ast.literal_eval für json Saiten Auswertung) ...

>>> 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}]} 
Verwandte Themen