const createQueryParams = (param, prefix = '') => { let queryString = ''; if (param.constructor === Object) { queryString = Object.keys(param).reduce((result, key) => { const obj = param[key]; const queryParam = result ? '${result}&${prefix}' : prefix; if (obj.constructor === Object) { return '${queryParam}${createQueryParams(obj, '${key}.')}'; } else if(obj.constructor === Array) { const qp= obj.map((item, index)=> { if (item.constructor === Object || item.constructor === Array) { const query = createQueryParams(item, '${key}[${index}].'); return '${query}'; } else { return '${key}[${index}]=${item}'; } }).reduce((res, cur) => { return res ? '${res}&${cur}': '${cur}'; }, ''); return '${queryParam}${qp}'; } else { return '${queryParam}${key}=${obj}'; } }, ''); } else if(param.constructor === Array) { queryString = param.reduce((res, cur) => '${res},${cur}'); } else { queryString = param; } return encodeURI(queryString); };
Example:
createQueryParams({"Context":{"countryCode":"NO"},"Pagination":{"limit":10,"offset":1},"AdditionalField":[{"name":"Policy Number","value":"Pol123"},{"name":"Policy Version","value":"PV1"}]});
Delon source share