Primeiro, altere True
para true
. Como um todo, isso funciona muito bem:
#!/usr/bin/python
import sys
import json
inputfile = sys.argv[1]
with open(inputfile,'r') as myfile:
obj = json.loads(myfile.read().replace('True','true'))
if "map" in obj:
del obj["map"]
json.dump(obj,sys.stdout,indent=4,separators=(',',': '))
Isso grava na saída padrão.
EDIT: a versão anterior parece ser um pouco perigosa. Melhor fazer assim:
#!/usr/bin/python
import sys
import json
inputfile = sys.argv[1]
with open(inputfile,'r') as myfile:
obj = json.loads(myfile.read().replace('True','true'))
if "map" in obj:
del obj["map"]
with open(inputfile,'w') as myfile:
json.dump(obj,myfile,indent=4,separators=(',',': '))
Como o script está realmente ciente do que é um JSON válido, ele lançará uma exceção se encontrar um código inválido, em vez de produzir uma saída imprevisível.
Isso funciona no python 3, só para você saber.
EDIT2:
Você pode modificar os objetos da maneira que quiser, a finalidade do Json é exatamente a serialização de objetos. Trate-os como matrizes associativas e dê a eles qualquer valor que você quiser. Por exemplo, você pode fazer isso:
#add a new string on the "ground" level
obj["new_key"]="lol"
#add a new subarray, with properties of different types
obj["this_is_array"]={"a": 3, "b": 16, "c": "string", "d": False }
#modify the value of existing field
obj["new_key"]="new value"
#insert into subarray (test if it exists first)
if "this_is_array" in obj:
obj["this_is_array"]["e"]=42