【发布时间】:2019-07-18 15:51:21
【问题描述】:
我有多个 json 对象的文件:{"key1": "value1"}{"key2": "value2"}。我想将 json 文件更新为 {"key1": "value1000"} 并添加新条目:{“key3”:“value3”}。我不知道如何将新的 json 对象添加到文件中。
更新后的 JSON 文件将类似于:{}{}{}。请注意 JSON 对象不是逗号分隔的文件。此文件包含一组 JSON 对象,这些对象是从 Google Cloud Storage 中提取的。
def main_v2():
data = ""
with open('data.json', 'r') as outfile:
for line_data in outfile:
obj = json.loads(line_data)
if len(obj["keys"]) > 1:
keys = obj["keys"][1: len(obj["keys"])]
obj["keys"] = obj["keys"][0: 1]
for key in keys:
temp = obj
temp['keys'] = key
##
I don't know how to add new entry
##
json.dump(data, 'jsonFile.data')
if __name__ == "__main__":
main_v2()
【问题讨论】:
-
人们试图告诉您的是您的文件格式不是有效的 JSON 格式。请参阅JSON specification。您从 Google Cloud Storage 提取数据的方式并没有创建有效的 JSON 文件。
-
解决此问题的另一种方法是以某种方式解析并将您拥有的文件转换为合法的 JSON。如果您可以提供现有文件的更全面的示例,那么如果您自己想不出办法,那么有人可以帮助您。
-
@martineau 正确 Google Cloud Storage 未创建有效的 JSON 文件。但是,我按照您的建议创建了有效的 JSON 数据。谢谢
-
极客:很高兴听到...在这种情况下,如果您仍有问题,您需要更新其中的内容或询问另一个问题。
-
geeks:实际上将整个文件转换为有效的 JSON 文件需要先将整个文件读入内存。但是,您问题中的代码需要在每一行上都有一个 JSON 对象,这实际上是一种称为 JSON Lines or JSONL 的相关格式(另请参见 Wikipedia article 上的内容)。基本上,您需要它采用像
{}\n{}\n{}\n这样的格式,每个对象之间都有换行符。
标签: python json python-3.x python-2.7