0

Trying to update JSON attribute value in line using JPATH.

Trying a solution in Python but also assessing Snowpark alternative(assuming data loaded in a table in variant column).

Python code is working for Objects but failing in case of arrays involved.

Python code:

json={
  "ID": "1",
  "NAME": { "FIRST_NAME": "ABC", "LAST_NAME": "XYZ" },
  "ADDR": [
    { "TYPE": "HOME", "ADDR_L1": "SDGSG", "CITY": "AFAFA" },
    { "TYPE": "OFFC", "ADDR_L1": "AFASF", "CITY": "SDGSDG" }
  ],
  "CONTACT": { "CONTACTS": [{ "TYPE": "A" }, { "TYPE": "B" }, { "TYPE": "C" }] },
  "LEVEL1OBJ": {
    "LEVEL2ARR": [{ "LEVEL3OBJ": "A" }, { "LEVEL3OBJ": "B" }],
    "LEVEL2ARR_1":[{"LEVEL3ARR":[{"LEVEL4OBJ":"A"},{"LEVEL4OBJ":"B"}]},{"LEVEL3ARR":[{"LEVEL4OBJ":"C"},{"LEVEL4OBJ":"D"}]}],  
    "LEVEL2OBJ": "GFDB"
  }
}
#Below input works
#keys=['NAME','FIRST_NAME']
#Below doesnt work
#keys=['ADDR','0','ADDR_L1']
#keys=['CONTACT','CONTACTS','0','TYPE']
keys=['LEVEL1OBJ','LEVEL2ARR_1','0','LEVEL3ARR','0','LEVEL4OBJ']

from functools import reduce  
import operator

def get_by_path(root, items):
    return reduce(operator.getitem, items, root)

def set_by_path(root, items, value):
    get_by_path(root, items[:-1])[items[-1]] = value

set_by_path(json,keys,'')
print(json)

Does anyone have had experience with this? What could be the code in Snowpark?

0 Answers0