code: def parse_json_qry(qry_str):
      
  
      def param_analyzer(param_list):
          rtn_list = []
          for param in param_list:
              parts = param.strip().split("=")
              try:
                  rtn_list.append(\
                          JsonQryProcessor[parts[0].strip().lower()](parts[1]))
              except IndexError:
                  rtn_list.append(\
                          JsonQryProcessor[parts[0].strip().lower()]())
          return rtn_list
  
      def part_analyzer(part, idx):
          nonlocal dallor, asterick, question_mark
          if part == "$":
              dallor = idx
              return part
          elif part == "*":
              asterick = idx
              return part
          elif part == "?":
              question_mark = idx
              return part
          elif part.startswith("="):
              return part
          return cssparse(part)[0]
      # pdb.set_trace()
      main_parts = qry_str.split("|")
      or_parts = main_parts.pop(0).strip()
      params = param_analyzer(main_parts)
      rtn_list = []
      for or_part in [item.strip()
                      for item in or_parts.split(",")
                      if item.strip()]:
          dallor, asterick, question_mark = None, None, None
          dot_parts = or_part.split(".")
          rtn_list.append(([part_analyzer(part, i) \
                              for i, part in enumerate(dot_parts)],
                            dallor,
                            asterick,
                            question_mark))
      return {"qry_parts": rtn_list, "params": params}
docs: Parses a json query string into its parts
  
      args:
          qry_str: query string
          params: variables passed into the string