2017-02-06 17 views
0

我试图将JSON对象附加到文本文件中的现有JSON对象。我的第一组数据看起来很喜欢这个。Python - 将JSON对象附加到存在的JSON对象

data = [ 
     { 
      "username": "Mike", 
      "code": "12345", 
      "city": "NYC" 
     } 
     ] 

然后,我需要另一套JSON对象追加到现有的文件看起来像这样:

data = [ 
     { 
      "username": "Mike", 
      "code": "12345", 
      "city": "NYC" 
     }, 
     { 
      "username": "Kelly", 
      "code": "56789", 
      "city": "NYC" 
     } 
     ] 

当我尝试运行:

with open('data2.txt', 'a') as outfile: 
    json.dump(data, outfile) 

我的数据是不是在正确的JSON格式。你能建议如何正确追加到文本文件?

+0

你不能只追加到一个文本文件,并期望它以某种方式知道如何在JSON格式。你必须读取文件,转换成json,然后添加你的值并重新写入 – Falmarri

回答

0

首先从文件中读取数据。

with open('data2.txt') as data_file:  
    old_data = json.load(data_file) 

然后将数据追加到老数据

data = old_data + data 

然后重写整个文件。

with open('data2.txt', 'w') as outfile: 
    json.dump(data, outfile) 
0

这可能不是处理您的要求最Python的方式,但我希望它会与你可能会遇到的一些问题有所帮助。我将加载和转储包装到try-except手镯中,以使代码更加健壮。 对我自己来说最大的惊喜是,当打开文件作为输出文件而不是'a'时,而是'w'。然而,如果你认为你已经在“data.append(data1)”行中追加了,这是非常有意义的,所以在转储到文件时不需要追加两次。

data = [{"username": "Mike", "code": "12345", "city": "NYC"}] 
data1 = {"username": "Kelly", "code": "56789", "city": "NYC"} 
data2 = {"username": "Bob", "code": "12222", "city": "NYC"} 

try: 
    with open('append.txt', 'r') as fin: 
     data = json.load(fin) 
except FileNotFoundError as exc: 
    pass 

try: 
    if data: 
     data.append(data1) 
     with open('append.txt', 'w') as fout: 
      json.dump(data, fout) 
except UnboundLocalError as exc: 
    with open('append.txt', 'w') as fout: 
     json.dump(data, fout)