Konvertieren Sie URL-Parameter in ein JavaScript-Objekt
Ich habe einen string wie diesen:
abc=foo&def=%5Basf%5D&xyz=5
Wie kann ich konvertieren es in ein JavaScript-Objekt wie diesem?
{
abc: 'foo',
def: '[asf]',
xyz: 5
}
InformationsquelleAutor der Frage Alex | 2011-12-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bearbeiten
Diese Bearbeiten verbessert und erläutert, die Antwort basierend auf den Kommentaren.
Beispiel
Analysieren
abc=foo&def=%5Basf%5D&xyz=5
in fünf Schritten:abc=foo","def=[asf]","xyz=5
abc":"foo","def":"[asf]","xyz":"5
{"abc":"foo","def":"[asf]","xyz":"5"}
gesetzlichen JSON.
Einer bessere Lösung ermöglicht mehr Zeichen im Suchtext. Es verwendet eine reviver-Funktion für URI Dekodieren:
Beispiel
gibt
Ursprüngliche Antwort
Einen one-liner:
InformationsquelleAutor der Antwort Wolfgang Kuehn
Split auf
&
um name/Wert-Paare, dann split jedes paar auf=
. Hier ist ein Beispiel:Einen anderen Ansatz, die Verwendung von regulären Ausdrücken:
Dies ist adaptiert von John Resig ' s "Suchen und Ersetzen nicht".
InformationsquelleAutor der Antwort Wayne Burkett
Dies ist die einfache version, offensichtlich werden Sie wollen, um einige Fehler zu überprüfen:
InformationsquelleAutor der Antwort Justin Niessner
Fand ich $.String.deparam die vollständigste pre gebaut-Lösung (tun können verschachtelte Objekte etc.). Überprüfen Sie heraus die Dokumentation.
InformationsquelleAutor der Antwort Daff
Ich hatte das gleiche problem, habe versucht, die Lösungen hier, aber keiner von Ihnen wirklich funktioniert, da hatte ich arrays in der URL-Parameter wie folgt:
So landete ich beim schreiben meines eigenen JS-Funktion, die einen array aus der param URI:
InformationsquelleAutor der Antwort pcigler
Andere Lösung, basierend auf dem neuesten standard der URLSearchParams (https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams)
Bitte beachten Sie, dass diese Lösung ist die Nutzung von
Array.von (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from)
und _.fromPairs (https://lodash.com/docs#fromPairs) von lodash der Einfachheit halber.
Sollte es einfach sein, um eine kompatible Lösung, da Sie Zugang zu searchParams.Einträge() iterator.
InformationsquelleAutor der Antwort Nickey
Eine knappe Lösung:
InformationsquelleAutor der Antwort Clemens Helm
Verwendung von ES6, URL-API und URLSearchParams API.
InformationsquelleAutor der Antwort supergentle
Gibt es keine native Lösung, ich bin mir dessen bewusst. Dojo hat eine eingebaute unserialization Methode, wenn Sie verwenden, die Rahmen von chance.
Ansonsten können Sie implementieren, die es sich lieber einfach:
edit: Hinzugefügt decodeURIComponent()
InformationsquelleAutor der Antwort mattacular
Es ist ein leichtes Bibliothek namens YouAreI.js ,getestet und macht das wirklich einfach.
InformationsquelleAutor der Antwort steel
Hier ist eine, die ich benutze:
Grundlegende Verwendung, zB.
?a=aa&b=bb
Object {a: "aa", b: "bb"}
Doppelte params, zB.
?a=aa&b=bb&c=cc&c=potato
Object {a: "aa", b: "bb", c: ["cc","potato"]}
Fehlende Schlüssel, zB.
?a=aa&b=bb&=cc
Object {a: "aa", b: "bb"}
Fehlende Werte, zB.
?a=aa&b=bb&c
Object {a: "aa", b: "bb"}
Den oben genannten JSON/regex-Lösungen werfen Sie einen syntax-Fehler, die auf diese verrückte url:
?a=aa&b=bb&c=&=dd&e
Object {a: "aa", b: "bb", c: ""}
InformationsquelleAutor der Antwort Mike Causer
Hier mein quick-and-dirty-version, im Grunde ist es der Aufteilung des URL-Parameter, getrennt durch '&' in array-Elemente, und dann iteriert über das array hinzufügen von Schlüssel/Wert-Paare, getrennt durch ein '=' in ein Objekt. Ich bin mit decodeURIComponent() zur übersetzung der kodierten Zeichen in Ihre normale string-äquivalente (also %20 wird zu einem Raum, %26 wird zu '&', etc.):
Beispiel:
gibt
Das einzige Problem ist, dass xyz ein string ist und keine Zahl (durch die Verwendung von decodeURIComponent()), aber darüber hinaus, dass es sich nicht um einen schlechten Ausgangspunkt.
InformationsquelleAutor der Antwort Eric
InformationsquelleAutor der Antwort XYz Amos
Mit phpjs
InformationsquelleAutor der Antwort Duy Hoang
Die vorgeschlagenen Lösungen habe ich bisher gefunden, nicht decken, komplexere Szenarien.
Ich brauchte, um zu konvertieren ein query-string wie
https://random.url.com?Target=Offer&Method=findAll&filters%5Bhas_goals_enabled%5D%5BTRUE%5D=1&filters%5Bstatus%5D=active&fields%5B%5D=id&fields%5B%5D=name&fields%5B%5D=default_goal_name
in ein Objekt wie:
ODER:
https://random.url.com?Target=Report&Method=getStats&fields%5B%5D=Offer.name&fields%5B%5D=Advertiser.company&fields%5B%5D=Stat.clicks&fields%5B%5D=Stat.conversions&fields%5B%5D=Stat.cpa&fields%5B%5D=Stat.payout&fields%5B%5D=Stat.date&fields%5B%5D=Stat.offer_id&fields%5B%5D=Affiliate.company&groups%5B%5D=Stat.offer_id&groups%5B%5D=Stat.date&filters%5BStat.affiliate_id%5D%5Bconditional%5D=EQUAL_TO&filters%5BStat.affiliate_id%5D%5Bvalues%5D=1831&limit=9999
IN:
Ich zusammengestellt und angepasst werden mehrere Lösungen in eine, die tatsächlich funktioniert:
CODE:
InformationsquelleAutor der Antwort Mauricio van der Maesen
ES6 one-liner. Sauber und einfach.
InformationsquelleAutor der Antwort rturkek
ERSTEN U-BEDARF, ZU DEFINIEREN, WAS EINE GET-VAR:
Als nur Lesen:
und verwenden wie:
InformationsquelleAutor der Antwort Ag.
Dies scheint die beste Lösung zu sein, wie es dauert mehrere Parameter mit dem gleichen Namen in Betracht.
Später entschied ich mich, es zu konvertieren zu einem jQuery-plugin zu...
Nun, die ersten nehmen die Parameter aber nur die jQuery-plugin, wird die gesamte url und die Rückgabe der serialisierten Parameter.
InformationsquelleAutor der Antwort jQuery Junkie
Musste ich auch deal mit
+
im query-Teil der URL (decodeURIComponent nicht), so dass ich angepasst, Wolfgang-code:In meinem Fall bin ich mit Hilfe von jQuery Holen-URL-ready form-Parameter, dann wird dieser trick zu bauen ein Objekt aus, und ich kann dann einfach update-Parameter auf das Objekt und die Neuerstellung der Abfrage-URL, z.B.:
InformationsquelleAutor der Antwort dlauzon
Gebäude auf der Spitze Mike Verursacher Antwort ich habe eine Funktion, die berücksichtigt, mehrere Parameter mit dem gleichen Schlüssel (
foo=bar&foo=baz
) und auch Komma getrennte Parameter (foo=bar,baz,bin
). Außerdem können Sie die Suche für eine bestimmte Suchanfrage key.Beispiel Eingabe:
foo.html?foo=bar&foo=baz&foo=bez,boz,buz&bar=1,2,3
Beispiel für die Ausgabe
InformationsquelleAutor der Antwort Gus