2015-10-06 100 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()解析它。不要混淆两者。