web-dev-qa-db-fra.com

Sérialiser un objet pour interroger une chaîne dans JavaScript / jQuery

J'essaie de trouver des informations sur la façon de sérialiser un objet pour interroger le format de chaîne, mais toutes mes recherches sont noyées dans des résultats indiquant comment aller dans l'autre sens (chaîne/formulaire/quoi que ce soit en JSON).

J'ai

{ one: 'first', two: 'second' }

et je veux

?one=first&two=second

Y at-il un bon moyen de le faire? Cela ne me dérange pas que des plugins ou des conneries - si le code que je trouve n'est pas un plugin, je le réécrirai probablement de toute façon ...

147
Tomas Aschan

Vous voulez $.param(): http://api.jquery.com/jQuery.param/

Plus précisément, vous voulez ceci:

var data = { one: 'first', two: 'second' };
var result = $.param(data);

Quand on leur donne quelque chose comme ça:

{a: 1, b : 23, c : "te!@#st"}

$.param retournera ceci:

a=1&b=23&c=te!%40%23st
228
Chris Laplante

Pour une fonction rapide non-JQuery ...

function jsonToQueryString(json) {
    return '?' + 
        Object.keys(json).map(function(key) {
            return encodeURIComponent(key) + '=' +
                encodeURIComponent(json[key]);
        }).join('&');
}

Notez que cela ne gère pas les tableaux ou les objets imbriqués.

60
Rich Smith

Une autre option pourrait être node-querystring .

Il est disponible à la fois dans npm et bower, c'est pourquoi je l'utilise.

15
wprl

Sinon, YUI a http://yuilibrary.com/yui/docs/api/classes/QueryString.html#method_stringify .

Par exemple:

var data = { one: 'first', two: 'second' };
var result = Y.QueryString.stringify(data);
4
Alex Stetsenko