code: def flatten_json_request_body(prefix, dict_body, spec):
      
      if len(spec) == 1 and 'type' in spec:
          return {prefix: to_str(dict_body, spec)}
  
      flat = {}
      for key, value in dict_body.items():
          node_type = spec[key]['type']
          if node_type == 'list':
              for idx, v in enumerate(value, 1):
                  pref = key + '.member.' + str(idx)
                  flat.update(flatten_json_request_body(
                      pref, v, spec[key]['member']))
          elif node_type == 'map':
              for idx, (k, v) in enumerate(value.items(), 1):
                  pref = key + '.entry.' + str(idx)
                  flat.update(flatten_json_request_body(
                      pref + '.key', k, spec[key]['key']))
                  flat.update(flatten_json_request_body(
                      pref + '.value', v, spec[key]['value']))
          else:
              flat.update(flatten_json_request_body(key, value, spec[key]))
  
      if prefix:
          prefix = prefix + '.'
      return dict((prefix + k, v) for k, v in flat.items())
docs: Convert a JSON request body into query params.