import json, copy
from io import StringIO
sampleFile = StringIO('''
[{"something": "else"}, {"eventWithUnknownName": "ArmReoriented", "visible": true}]
''')
def hideReorientedArm(obj):
if isinstance(obj, dict):
if obj.get("visible") is True:
foundArmReoriented = False
for (k,v) in obj.items():
if v == "ArmReoriented":
foundArmReoriented = True
break
if foundArmReoriented:
obj["visible"] = False
return obj
def walk(obj, updateFn):
if isinstance(obj, list):
obj = [walk(elem, updateFn) for elem in obj]
elif isinstance(obj, dict):
obj = {k: walk(v, updateFn) for k, v in obj.items()}
return updateFn(obj)
data = json.load(sampleFile)
data = walk(data, hideReorientedArm)
print(json.dumps(data))
aW1wb3J0IGpzb24sIGNvcHkKZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KCnNhbXBsZUZpbGUgPSBTdHJpbmdJTygnJycKW3sic29tZXRoaW5nIjogImVsc2UifSwgeyJldmVudFdpdGhVbmtub3duTmFtZSI6ICJBcm1SZW9yaWVudGVkIiwgInZpc2libGUiOiB0cnVlfV0KJycnKQoKZGVmIGhpZGVSZW9yaWVudGVkQXJtKG9iaik6CiAgICBpZiBpc2luc3RhbmNlKG9iaiwgZGljdCk6CiAgICAgICAgaWYgb2JqLmdldCgidmlzaWJsZSIpIGlzIFRydWU6CiAgICAgICAgICAgIGZvdW5kQXJtUmVvcmllbnRlZCA9IEZhbHNlCiAgICAgICAgICAgIGZvciAoayx2KSBpbiBvYmouaXRlbXMoKToKICAgICAgICAgICAgICAgIGlmIHYgPT0gIkFybVJlb3JpZW50ZWQiOgogICAgICAgICAgICAgICAgICAgIGZvdW5kQXJtUmVvcmllbnRlZCA9IFRydWUKICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBpZiBmb3VuZEFybVJlb3JpZW50ZWQ6CiAgICAgICAgICAgICAgICBvYmpbInZpc2libGUiXSA9IEZhbHNlCiAgICByZXR1cm4gb2JqCgpkZWYgd2FsayhvYmosIHVwZGF0ZUZuKToKICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBsaXN0KToKICAgICAgICBvYmogPSBbd2FsayhlbGVtLCB1cGRhdGVGbikgZm9yIGVsZW0gaW4gb2JqXQogICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgZGljdCk6CiAgICAgICAgb2JqID0ge2s6IHdhbGsodiwgdXBkYXRlRm4pIGZvciBrLCB2IGluIG9iai5pdGVtcygpfQogICAgcmV0dXJuIHVwZGF0ZUZuKG9iaikKCmRhdGEgPSBqc29uLmxvYWQoc2FtcGxlRmlsZSkKZGF0YSA9IHdhbGsoZGF0YSwgaGlkZVJlb3JpZW50ZWRBcm0pCnByaW50KGpzb24uZHVtcHMoZGF0YSkpCg==