486 Stimmen

Wie wandelt man URL-Parameter in ein JavaScript-Objekt um?

Ich habe einen String wie diesen:

abc=foo&def=%5Basf%5D&xyz=5

Wie kann ich sie in ein JavaScript-Objekt wie dieses umwandeln?

{
  abc: 'foo',
  def: '[asf]',
  xyz: 5
}

6voto

fadomire Punkte 1745

ES6 one liner (wenn man es angesichts der langen Zeile so nennen kann)

[...new URLSearchParams(location.search).entries()].reduce((prev, [key,val]) => {prev[key] = val; return prev}, {})

5voto

supergentle Punkte 901

Verwendung von ES6, URL API und URLSearchParams API.

function objectifyQueryString(url) {
  let _url = new URL(url);
  let _params = new URLSearchParams(_url.search);
  let query = Array.from(_params.keys()).reduce((sum, value)=>{
    return Object.assign({[value]: _params.get(value)}, sum);
  }, {});
  return query;
}

5voto

Eine einfache Antwort mit eingebautem nativen Node-Modul (keine npm-Module von Dritten)

Das Modul querystring bietet Dienstprogramme zum Parsen und Formatieren von URL-Abfragezeichenfolgen. Es kann mit aufgerufen werden:

const querystring = require('querystring');

const body = "abc=foo&def=%5Basf%5D&xyz=5"
const parseJSON = querystring.parse(body);
console.log(parseJSON);

4voto

mattacular Punkte 1839

Soweit ich weiß, gibt es keine native Lösung. Dojo hat eine eingebaute unserialization-Methode, wenn Sie dieses Framework zufällig verwenden.

Andernfalls können Sie es ganz einfach selbst implementieren:

function unserialize(str) {
  str = decodeURIComponent(str);
  var chunks = str.split('&'),
      obj = {};
  for(var c=0; c < chunks.length; c++) {
    var split = chunks[c].split('=', 2);
    obj[split[0]] = split[1];
  }
  return obj;
}

edit: decodeURIComponent() hinzugefügt

3voto

Alex Alan Nunes Punkte 110
/**
 * Parses and builds Object of URL query string.
 * @param {string} query The URL query string.
 * @return {!Object<string, string>}
 */
function parseQueryString(query) {
  if (!query) {
    return {};
  }
  return (/^[?#]/.test(query) ? query.slice(1) : query)
      .split('&')
      .reduce((params, param) => {
        const item = param.split('=');
        const key = decodeURIComponent(item[0] || '');
        const value = decodeURIComponent(item[1] || '');
        if (key) {
          params[key] = value;
        }
        return params;
      }, {});
}

console.log(parseQueryString('?v=MFa9pvnVe0w&ku=user&from=89&aw=1'))

see log

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X