2015-10-06 137 views
0

我有一個字符串,這是我作爲評價以JSON:無法解析字符串在python

import ast 
def parse(s): 
    return ast.literal_eval(s) 


print parse(string) 

{'_meta': {'name': 'foo', 'version': 0.2}, 
    'clientId': 'google.com', 
    'clip': False, 
    'cts': 1444088114, 
    'dev': 0, 
    'uuid': '4375d784-809f-4243-886b-5dd2e6d2c3b7'} 

但是當我使用jsonlint.com來驗證上述JSON .. 它拋出架構錯誤..

如果我嘗試使用json.loads 我看到下列錯誤:

Try: json.loads(str(parse(string))) 
    ValueError: Expecting property name: line 1 column 1 (char 1) 

我基本上是試圖此JSON轉換中的Avro How to covert json string to avro in python?

+0

爲什麼不''json.loads(string)'? –

+0

它引發錯誤 – Fraz

+0

錯誤是什麼? –

回答

3

ast.literal_eval()加載Python語法。它不會解析JSON,這就是json.loads()函數的用途。

將Python對象轉換爲字符串str()仍然是Python語法,而不是JSON語法,這就是json.dumps()的用途。

JSON不是Python語法。 Python使用None,其中JSON使用null; Python使用TrueFalse作爲布爾值,JSON使用truefalse。 JSON字符串總是使用"雙引號,Python根據內容使用單或雙引號。使用Python 2時,字符串包含字節,除非您使用unicode對象(可通過它們的文字符號上的u前綴識別),但JSON字符串完全可識別Unicode。 Python將使用\xhh來處理ASCII字符以外的Latin-1範圍內的Unicode字符,對於非BMP unicode點,\Uhhhhhhhh將使用\Uhhhhhhhh,但JSON只使用\uhhhh代碼。通常應將JSON整數視爲僅限於C double類型所表示的範圍(因爲JavaScript數字始終是浮點數),Python整數除了適合您的內存外,沒有其他限制。

因此,JSON和Python語法是不可互換的。您不能在Python對象上使用str(),並期望將其解析爲JSON。您不能使用json.dumps()並使用ast.literal_eval()解析它。不要混淆兩者。