【问题标题】:Python string to jsonPython字符串到json
【发布时间】:2013-09-21 09:35:04
【问题描述】:
a1='[{"v1":"value"}, {"v1":"value"}, ]' 
b1=json.loads(a1) 

创建异常,但是。

a2='[{"v1":"value"}, {"v1":"value"}]' 
b2=json.loads(a2) 

不会产生任何异常/错误。有人可以帮我理解为什么第一个示例中的最后一个逗号是一个大问题,并且

如何在不修改数据的情况下转换第一个示例?

【问题讨论】:

  • 第一个示例不是有效的 JSON 语法。您无法使用符合标准的 JSON 解析器对其进行解析。 Quick'n'dirty 解决方案:通过 Python 的 eval 而不是 json.loads 运行它。
  • 你真的应该问为什么1中的数据不干净。如果您正在使用网络服务,为什么不向您发送正确的 json 等。一旦确定您可以查看各种清理方法,包括上面的评论

标签: json string python-2.7 type-conversion


【解决方案1】:

JSON syntax 不允许使用终端逗号,因此解析器正确地拒绝了它。

附带说明,此语法也不是有效的 Javascript。一些浏览器会接受它,但这样做的行为超出了标准。

【讨论】:

  • 谢谢。我从我的后端获取了这种类型的 JSON,我只是想确保我仍然可以使用它。不知道如何在不实际更改数据的情况下(通过删除最后一个逗号)。
【解决方案2】:

这是因为你的 a1 JSON 无效:

来自 JSONLint:

Parse error on line 7:
..."value"    },    ]
--------------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['

a2 JSON 是有效的,因此也不例外。

编辑:

Bogdan 在 cmets 中的 'quick n dirty' 解决方案将允许您在保留相同代码的同时静音异常

【讨论】:

    猜你喜欢
    • 2020-02-15
    • 2020-06-25
    • 2017-11-11
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多