2016-11-22 2 views
0

Я импортирую файл JSON и использую его в качестве шаблона, по которому я изменяю некоторые свойства.JSON as template: не очищает

with open('example.json') as data_file: 
    j = json.load(data_file) 
... # and within a loop: 
    with open('output.json', 'w') as outfile: 
     activejson = j # I would like this to reset or pull fresh from j 
     ... # modify properties here 
     json.dump(activejson, outfile, indent=4) 

activejson не тянет шаблон j свежих через каждую итерацию цикла. (Я могу вытащить старые, измененные значения из предыдущих итераций в activejson в области «изменить свойства здесь».) Я понимаю, что activejson указывает на j вместо того, чтобы служить в качестве копии, но activejson = j.copy() не подходит для трюка либо, ни activejson = {}. Какая правильная команда/способ опорочить эту переменную и вытащить шаблон после каждой итерации? Каков наиболее эффективный способ справиться с этим?

+0

'j.copy()' только делает мелкую копию, поэтому у вас все еще возникают проблемы с вложенными объектами. См. [Copy.deepcopy] (https://docs.python.org/3/library/copy.html#copy.deepcopy) –

ответ

3

Поскольку JSON обычно структурирован как вложенные объекты, вам нужно будет использовать copy.deepcopy.

activejson = copy.deepcopy(j)