可能是因为列表可以很好地处理其他任务,所以不需要此类。现在这段代码:
def append_message_file(self, messages):
"""Adds new messages to a file"""
history = QFile('soul.json')
if history.open(QIODevice.ReadOnly):
document = QJsonDocument().fromJson(history.readAll())
array = document.array()
history.close()
else:
array = []
for index in range(len(messages['user'])):
value = QJsonValue(messages['user'][index] + ': ' + messages['message'][index])
array.append(value.toString())
document = QJsonDocument(array)
if history.open(QIODevice.ReadOnly):
history.write(document.toJson(QJsonDocument.Indented))
history.close()
messages = { 'user': [], 'message': [] }
messages['user'].append('asw')
messages['message'].append('How are you?')
self.append_message_file(messages)
现在soul.json:
[
"asw: Hi!"
]
上面的代码必须做一个简单的事情:从JSON格式的``历史''文件信息中获取信息,将其添加到``文档''中,然后将一个或多个值添加到此文档的数组中并将其写入到一个文件。 没有QJsonDocument,一切都很好。但是,如果我在多行上有消息,那么仅编写不带引号的消息是不够的。当开始使用此类时,似乎什么也不会发生。
但是,第一个问题是PyQt5.QtCore模块中缺少QJsonArray。然后我将QJsonValue的值添加到普通列表中,然后添加到QJsonDocument中。但这仅在文件中没有数据的情况下有效。如果是这样,则会弹出“分段错误”错误。
有什么方法可以消除这种情况,或者总体上讲关于保护的想法吗?