T = {
"dw-table": {
"filters": "null",
"column-vis": ["true", "true", "true", "true", "true", "true"],
"disp-len": "15"
},
"st-table": {
"filters": {
"group": "5"
},
"disp-len": "100",
"column-vis": ["true", "true", "true", "true", "true"]
},
"ls-table": {
"filters": {
"group": "0"
},
"column-vis": ["true", "true", "true", "true", "true", "true", "true", "true", "true", "true"],
"disp-len": "15"
},
"proj-table": {
"filters": {
"group": "1",
"links_count": {
"begin": "1",
"end": "",
"type": "range"
}
}
},
"lsp-table": {
"filters": {
"group": "0",
"links_count": "null"
}
}
}
def get(lis, name):
if isinstance(name, str):
name = name.split('/')[1:]
if not isinstance(lis, dict):
return lis
return get(lis.get(name[0]), name[1:])
def editByXpath(dict, path, val):
if isinstance(path, str):
path = path.split('/')[1:]
try:
if path[0].isdigit():
p = int(path[0])
else:
p = path[0]
if len(path) == 1:
dict[p] = val
return
else:
editByXpath(dict[p], path[1:], val)
except:
raise KeyError()
def main():
print get(T, '/dw-table/column-vis')
print get(T, '/lsp-table/filters/group')
editByXpath(T, '/lsp-table/filters/group', "lol")
print get(T, '/lsp-table/filters/group')
if __name__ == '__main__':
main()
VCA9IHsKICAgICJkdy10YWJsZSI6IHsKICAgICAgICAiZmlsdGVycyI6ICJudWxsIiwKICAgICAgICAiY29sdW1uLXZpcyI6IFsidHJ1ZSIsICJ0cnVlIiwgInRydWUiLCAidHJ1ZSIsICJ0cnVlIiwgInRydWUiXSwKICAgICAgICAiZGlzcC1sZW4iOiAiMTUiCiAgICB9LAogICAgInN0LXRhYmxlIjogewogICAgICAgICJmaWx0ZXJzIjogewogICAgICAgICAgICAiZ3JvdXAiOiAiNSIKICAgICAgICB9LAogICAgICAgICJkaXNwLWxlbiI6ICIxMDAiLAogICAgICAgICJjb2x1bW4tdmlzIjogWyJ0cnVlIiwgInRydWUiLCAidHJ1ZSIsICJ0cnVlIiwgInRydWUiXQogICAgfSwKICAgICJscy10YWJsZSI6IHsKICAgICAgICAiZmlsdGVycyI6IHsKICAgICAgICAgICAgImdyb3VwIjogIjAiCiAgICAgICAgfSwKICAgICAgICAiY29sdW1uLXZpcyI6IFsidHJ1ZSIsICJ0cnVlIiwgInRydWUiLCAidHJ1ZSIsICJ0cnVlIiwgInRydWUiLCAidHJ1ZSIsICJ0cnVlIiwgInRydWUiLCAidHJ1ZSJdLAogICAgICAgICJkaXNwLWxlbiI6ICIxNSIKICAgIH0sCiAgICAicHJvai10YWJsZSI6IHsKICAgICAgICAiZmlsdGVycyI6IHsKICAgICAgICAgICAgImdyb3VwIjogIjEiLAogICAgICAgICAgICAibGlua3NfY291bnQiOiB7CiAgICAgICAgICAgICAgICAiYmVnaW4iOiAiMSIsCiAgICAgICAgICAgICAgICAiZW5kIjogIiIsCiAgICAgICAgICAgICAgICAidHlwZSI6ICJyYW5nZSIKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sCiAgICAibHNwLXRhYmxlIjogewogICAgICAgICJmaWx0ZXJzIjogewogICAgICAgICAgICAiZ3JvdXAiOiAiMCIsCiAgICAgICAgICAgICJsaW5rc19jb3VudCI6ICJudWxsIgogICAgICAgIH0KICAgIH0KfQogCmRlZiBnZXQobGlzLCBuYW1lKToKICAgIGlmIGlzaW5zdGFuY2UobmFtZSwgc3RyKToKICAgICAgICBuYW1lID0gbmFtZS5zcGxpdCgnLycpWzE6XQogICAgaWYgbm90IGlzaW5zdGFuY2UobGlzLCBkaWN0KToKICAgICAgICByZXR1cm4gbGlzCiAgICByZXR1cm4gZ2V0KGxpcy5nZXQobmFtZVswXSksIG5hbWVbMTpdKQogCmRlZiBlZGl0QnlYcGF0aChkaWN0LCBwYXRoLCB2YWwpOgogICAgaWYgaXNpbnN0YW5jZShwYXRoLCBzdHIpOgogICAgICAgIHBhdGggPSBwYXRoLnNwbGl0KCcvJylbMTpdCiAgICB0cnk6CiAgICAgICAgaWYgcGF0aFswXS5pc2RpZ2l0KCk6CiAgICAgICAgICAgIHAgPSBpbnQocGF0aFswXSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBwID0gcGF0aFswXQogICAgICAgIGlmIGxlbihwYXRoKSA9PSAxOgogICAgICAgICAgICBkaWN0W3BdID0gdmFsCiAgICAgICAgICAgIHJldHVybgogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGVkaXRCeVhwYXRoKGRpY3RbcF0sIHBhdGhbMTpdLCB2YWwpCiAgICBleGNlcHQ6CiAgICAgICAgcmFpc2UgS2V5RXJyb3IoKQoKCmRlZiBtYWluKCk6CiAgICBwcmludCBnZXQoVCwgJy9kdy10YWJsZS9jb2x1bW4tdmlzJykKICAgIHByaW50IGdldChULCAnL2xzcC10YWJsZS9maWx0ZXJzL2dyb3VwJykKICAgIGVkaXRCeVhwYXRoKFQsICcvbHNwLXRhYmxlL2ZpbHRlcnMvZ3JvdXAnLCAibG9sIikKICAgIHByaW50IGdldChULCAnL2xzcC10YWJsZS9maWx0ZXJzL2dyb3VwJykKIAppZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgbWFpbigp