无法在python中解析字符串到json

时间:2015-10-06 20:41:09

标签: python json string

我有一个字符串,我评价为:

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)

我基本上试图在avro How to covert json string to avro in python?

中转换这个json

1 个答案:

答案 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时,字符串包含 bytes ,除非您使用unicode个对象(在其文字符号上可以通过u前缀识别),但JSON字符串完全支持Unicode。 Python将使用\xhh表示ASCII以外的Latin-1范围内的Unicode字符,\Uhhhhhhhh表示非BMP unicode点,但JSON只使用\uhhhh代码。通常应将JSON整数视为仅限于C double类型可表示的范围(因为JavaScript数字始终是浮点数),Python整数除了适合您的内存之外没有任何限制。

因此,JSON和Python语法不可互换。您不能在Python对象上使用str(),并期望将其解析为JSON。您无法使用json.dumps()并使用ast.literal_eval()进行解析。不要混淆两者。