Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ############## FOR EXCTRACTING AN OBJECT DEFINED INSIDE A STRING CONTAINING JavaScript CODE ##############
- ################################################ examples ################################################
- # findObj_inJS('x=90; y=50; z=3;', 'z') # returns # 3
- # findObj_inJS('x=90; y=50; z=3;', ['x', 'y', 'z']) # returns # {'x': 90, 'y': 50, 'z': 3}
- # findObj_inJS('d = {"x": 90, "y": 50, "z": 3}', '"x"') # returns # 90
- # findObj_inJS('d = {"x": 90, "y": 50, "z": 3}', ['d']) # returns # {'d': {'x': 90, 'y': 50, 'z': 3}}
- ##########################################################################################################
- #!pip install slimit # https://slimit.readthedocs.io/en/latest/
- import slimit
- from slimit.visitors import nodevisitor
- import json
- def findObj_inJS(jsStr, objName, findAll=False, jStrict=True, printErr=False):
- tree = slimit.parser.Parser().parse(jsStr)
- objList = objName if isinstance(objName, list) else [objName]
- toRet = {k: [] for k in objList}
- for n in nodevisitor.visit(tree):
- if not objList: break
- for c in (n.children() if hasattr(n, 'children') else [n]):
- if not objList: break
- if not (hasattr(c, 'left') and hasattr(c, 'right')): continue
- cName, cVal = c.left.to_ecma(), c.right.to_ecma()
- if cName in objList:
- try: toRet[cName].append(json.loads(cVal))
- except Exception as e:
- if printErr: print(type(e), e)
- if not jStrict: toRet[cName].append(cVal)
- if toRet[cName] and not findAll: objList.remove(cName)
- for k, v in toRet.items():
- if printErr and not v: print('not found: ', k)
- if not findAll: toRet[k] = v[0] if v else None
- return toRet if isinstance(objName, list) else toRet[objName]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement