json - Python json总是第一次失败
问题描述
我正在尝试使用 python 格式化一个 json 文件。
我拥有的实际 json 文件如下所示:
{"@timestamp":"2021-08-01T00:17:04.301Z","name":"name","message":"EndPoint Operation","deviceAction":"Blocked"}{"@timestamp":"2021-08-01T00:26:35.250Z","name":"name","deviceAction":"DENIED"}
如您所见,文件格式不正确,因为缺少逗号。
所以我有这个函数来添加逗号并使其成为一个对象数组。
def structure_json():
with open("./zip/file.json", "r+") as f:
old = f.read()
f.seek(0) # rewind
f.write(old.replace('}{', '},{'))
tmps = '[' + str(old) + ']'
json_string = json.loads(tmps)
for key in json_string:
to_queue.append(key)
f.close
structure_json()
该脚本正是我需要他做的,它确实添加了逗号和数组,但出于某种原因。如果我放置一个具有相同问题的新 json 文件并运行我的脚本,它确实会失败,并给出以下错误:
json.decoder.JSONDecodeError: Expecting ',' delimiter: line 1 column 119 (char 118)
这与 json 的第一行有关。我确实相信这个问题是由于f.read()
which 是第一个被调用的,并且在给定的时间 json 没有被格式化。但即使它确实失败了,我打开文件,我看到它的格式是正确的,所以如果我再次运行脚本,一切都会正常工作。
谁能帮我解决这个问题?因为我拥有的函数只是格式化文件后需要发生的一系列事件中的第一个元素,我每次可以运行两次脚本。
非常感谢大家。
解决方案
由于您没有将替换的值保存回旧变量,因此它仍然包含不正确的 json
def structure_json():
with open("./zip/file.json", "r+") as f:
old = f.read()
f.seek(0) # rewind
# save to the old string after replace
new = old.replace('}{', '},{')
f.write(new)
tmps = '[' + str(new) + ']'
json_string = json.loads(tmps)
for key in json_string:
to_queue.append(key)
f.close
structure_json()
推荐阅读
- python - Problems using paho mqtt client with python 3.7
- android - Unable to fetch images in view pager from MongoDb
- powershell - 多个站点的Powershell预热脚本?
- go - 我可以在 app-engine 上部署 Golang 应用程序并在不修改代码的情况下读/写文件吗?
- xaml - Keyboard overlaps Entry in Xamarin Forms
- php - Cakephp 3.6:注意(8):未定义索引:搜索但所需功能有效
- javascript - Is there way to test below code using sinon
- spring-statemachine - Spring 状态机 - 表脚本
- inno-setup - 在 Inno Setup 中安装一些文件
- r - LPsolve 的表达式