我正在尝试将以下内容格式化为JSON(在Python中):
{
"sessionTimeout":"3600.0",
"serverVersion":"LK_LK-NL-7_188-176-419",
"worldDawn":"2018-10-09 06:00:00 Etc/GMT",
"Data":{
"Player":[
{
"nick":"Player11226400",
"points":"44",
"alliancePermission":"0",
"isOnVacation":"false",
"id":"5048",
"rank":"561",
"entityName":"Player",
},
{
"nick":"Player11230580",
"points":"15",
"alliancePermission":"0",
"isOnVacation":"false",
"id":"5215",
"rank":"2081",
"entityName":"Player",
},
{
"nick":"Player11291581",
"points":"15",
"alliancePermission":"0",
"isOnVacation":"false",
"id":"5942",
"rank":"2081",
"entityName":"Player",
}
]
}
}
当然,每个JSON验证器都会告诉我这不是有效的JSON,因为在each}之前有一个“,”,所以我想删除这个逗号。我尝试用.replace('“Player”,“,'”Player“)删除它们,但我认为这不是一个好的解决方案。这是因为我在例如Alliance或habitation字符串(“habitation”和“Alliance”,)中也有尾随“,”
有谁能帮我找到更好的解决办法吗?在
由于JSON是YAML的一个子集,允许使用悬空逗号,因此可以在这里使用YAML解析器。在
这个库有一个
^{pr2}$load
函数,类似于标准库json.loads
。在您还可以将}值,那么这就不起作用了。在
ast.literal_eval
用于此特定数据。但是与pyyaml
不同的是,如果json包含文本false
、true
或{两种解决方案:
首先,如果您的json文件没有}布尔值,那么很酷的做法是使用可以处理这些逗号的
null
或{ast.literal_eval
读取输入,然后根据需要将dict作为json转储:如果不能,可以使用正则表达式删除换行符之前的逗号,如果下一行以空格+右大括号/方括号开头:
^{pr2}$下面是一个完整的片段,其中包含2种方法,并提供了您输入的精简版本:
两个方法都成功地解析了输入文件。只要没有空指针和布尔值,第一种方法就可以完美地工作,第二种方法在某些模糊的格式化情况下可能会失败。万一运气不好,你可以在两者之间做些什么。在
使用python的json模块将python dict导出为有效的json:
相关问题 更多 >
编程相关推荐