【问题标题】:unable to parse string to json in python无法在python中将字符串解析为json
【发布时间】:2015-10-07 04:54:46
【问题描述】:

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

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?

【问题讨论】:

  • 为什么不json.loads(string)
  • 值错误(发布问题 json.loads(str(parse(string))) ValueError: Expecting property name: line 1 column 1 (char 1))
  • @PadraicCunningham:它不是 JSON,所以 json.loads() 不起作用。
  • json.dumps(s),认为输出是你想要的,而不是你正在使用的
  • 是的.. 我必须做 json.loads(json.dumps(s)) :)

标签: python json string


【解决方案1】:

ast.literal_eval() 加载 Python 语法。它不会解析 JSON,这就是 json.loads() 函数的用途。

使用str() 将 Python 对象转换为字符串仍然是 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() 对其进行解析。不要混淆两者。

【讨论】:

    猜你喜欢
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多