2016-05-11 7 views
-3

私は応答として、次のUnicodeを返すAPIで働いています:とValueError:不正な形式の文字列

dd = u"""{"meta":{"request":{"granularity":"Weekly","main_domain_only":false, 
"domain":"borivali.me", 
    "country":"world"},"status":"Success", 
"last_updated":"2016-05-09"},"bounce_rate":[{"date":"2016-04-12","bounce_rate":0.5}, 
    {"date":"2016-04-19","bounce_rate":0.13355382826388454}, 
{"date":"2016-04-26","bounce_rate":0.0}, 
    {"date":"2016-05-03","bounce_rate":0.23602940883106352}]}""" 

私は次のように、この情報を解析しようとしています:

ddd = ast.literal_eval(dd) 
print ddd 

しかし、私は次のエラーを取得する:

ValueError: malformed string

ワットのようです何私のコードで徹夜?

PS:ddは、辞書ではなくユニコード文字列を格納します。次の定義を想定し

+0

何を解析するのですか? 'dd'は辞書です。それを使ってください。 –

+0

@DisplayNameこれはユニコードです。既にその冒頭で言及した。 –

+0

私たちに教えてください[MCVE] - _unicode literal_ Pythonの辞書リテラルではなく、解析されます。 –

答えて

2

は正しいです:その宣言、sはJSON文書であるとjsonライブラリとPythonオブジェクトに解析することも考えると

s = u"""{"meta":{"request":{"granularity":"Weekly","main_domain_only":false, 
"domain":"borivali.me", 
    "country":"world"},"status":"Success", 
"last_updated":"2016-05-09"},"bounce_rate":[{"date":"2016-04-12","bounce_rate":0.5}, 
    {"date":"2016-04-19","bounce_rate":0.13355382826388454}, 
{"date":"2016-04-26","bounce_rate":0.0}, 
    {"date":"2016-05-03","bounce_rate":0.23602940883106352}]}""" 

import json 
p = json.loads(s) 

astモジュールはPythonオブジェクトのreprをdeserialiseするために使用され、reprは、一般的な場合に等しくないJSONシリアル化を行いれます。以下の関係が成り立ちます(少なくとも単純なPython型の場合、JSON標準でよく定義されています - リスト、辞書、文字列)。

d == ast.literal_eval(repr(d)) 
d == json.loads(json.dumps(d)) 
+0

's'の内容は有効なPythonではありません(' s'はPythonでは 'False'であるため、それらをスクリプトに貼り付けて直接実行することで見ることができます)。それがなければ 'literal_eval'が動作します。しかし、 'json'を使うことは間違いなく正しいことです。 –

関連する問題