我有以下代码将写入JSON文件:
import json
def write_data_to_table(word, hash):
data = {word: hash}
with open("rainbow_table\\rainbow.json", "a+") as table:
table.write(json.dumps(data))
我想要做的是打开JSON文件,向其添加另一行,然后关闭它。如何在不弄乱文件的情况下执行此操作?
截至目前,当我运行代码时,我得到以下内容:
write_data_to_table("test1", "0123456789")
write_data_to_table("test2", "00123456789")
write_data_to_table("test3", "000123456789")
#<= {"test1": "0123456789"}{"test2": "00123456789"}{"test3": "000123456789"}
如何在不完全搞砸的情况下更新文件?
我的预期输出可能类似于:
{
"test1": "0123456789",
"test2": "00123456789",
"test3": "000123456789",
}
答案 0 :(得分:4)
您可以通过以下方式阅读JSON数据:
parsed_json = json.loads(json_string)
您现在操纵经典字典。您可以使用以下内容添加数据:
parsed_json.update({'test4': 0000123456789})
然后您可以使用以下方法将数据写入文件:
with open('data.txt', 'w') as outfile:
json.dump(parsed_json, outfile)
答案 1 :(得分:1)
如果你确定结束“}”是文件中的最后一个字节,你可以这样做:
>>> f = open('test.json', 'a+')
>>> json.dump({"foo": "bar"}, f) # create the file
>>> f.seek(0)
>>> f.read()
'{"foo": "bar"}'
>>> f.seek(-1, 2)
>>> f.write(',\n', f.write(',\n' + json.dumps({"spam": "bacon"})[1:]))
>>> f.seek(0)
>>> print(f.read())
{"foo": "bar",
"spam": "bacon"}
由于您的数据不是分层数据,因此您应该考虑像“TSV”这样的平面格式。