making a recursive algorithm for converting url string into json

I reworked the algorithm using Object.fromEntries(new URLSearchParams()).

function parse(query) {
  try {
    return JSON.parse(query);
  } catch {
    if (!isNaN(query)) {
      return Number(query);
    }

    if (typeof query !== "string") {
      const obj = {};
      for (const queryKey in query) {
        if (query.hasOwnProperty(queryKey)) {
          obj[queryKey] = parse(query[queryKey]);
        }
      }

      return obj;
    }
    if (!query) {
      return "";
    }

    if (query.toLowerCase().match(/^(true|false)$/)) {
      return query.toLowerCase() === "true";
    }

    const object = Object.fromEntries(new URLSearchParams(query));
    const values = Object.values(object);
    if (values.length === 1 && values[0] === "") {
      return query;
    }
    return parse(object);
  }
}



const q = 'foo=bar&foo1=foo%3Dbar%26foo2%3Dfoo%253Dbar';
console.log(parse(q));

console.log('fetching larger example...');

fetch('https://gist.githubusercontent.com/avi12/cd1d6728445608d64475809a8ddccc9c/raw/030974baed3eaadb26d9378979b83b1d30a265a3/url-input-example.txt')
  .then(response => response.text())
  .then(parse)
  .then(console.log);
.as-console-wrapper { max-height: 100% !important; top: 0; }

CLICK HERE to find out more related problems solutions.

Leave a Comment

Your email address will not be published.

Scroll to Top