110 votes

Y a-t-il une fonction native pour convertir JSON en paramètres d'URL?

J'ai besoin de convertir un objet JSON en forme d'URL comme : "paramètre=12&asd=1"

J'ai terminé avec ceci :

        var data = {
            'action':'actualiza_resultado',
            'postID': 1,
            'gl': 2,
            'gl2' : 3
        };

        var string_=JSON.stringify(data);

        string_=string_.replace(/{/g, "");
        string_=string_.replace(/}/g, "");
        string_=string_.replace(/:/g, "=")
        string_=string_.replace(/,/g, "&");
        string_=string_.replace(/"/g, "");

Mais je me demande s'il y a une fonction en JavaScript ou dans l'objet JSON pour le faire?

5voto

Cezar D. Points 176

Quelque chose que je trouve joli en ES6:

function urlfy(obj) {
    return Object
        .keys(obj)
        .map(k => `${encodeURIComponent(k)}=${encodeURIComponent(obj[k])}`)
        .join('&');
}

Mise à jour ultérieure (même chose, peut-être un peu plus propre):

const urlfy = obj => Object
    .keys(obj)
    .map(k => encodeURIComponent(k) + '=' + encodeURIComponent(obj[k]))
    .join('&');

3voto

Quentin Points 325526

Mais je me demande s'il existe une fonction en javascript

Rien de préécrit dans le noyau.

ou json pour cela?

JSON est un format de données. Il n'a pas du tout de fonctions.


C'est cependant un problème relativement trivial à résoudre, du moins pour les structures de données plates.

Ne codez pas les objets en JSON, alors:

function obj_to_query(obj) {
    var parts = [];
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]));
        }
    }
    return "?" + parts.join('&');
}

alert(obj_to_query({
    'action': 'actualiza_resultado',
    'postID': 1,
    'gl': 2,
    'gl2': 3
}));  

Il n'existe pas de méthode standard pour encoder des structures de données complexes (par exemple, avec des objets ou des tableaux imbriqués). Il ne serait pas difficile d'étendre cela pour émuler la méthode PHP (d'avoir des crochets dans les noms de champs) ou similaire toutefois.

3voto

Perki Points 126

Celui-ci traite les tableaux en changeant le name en multiple name[]

function getAsUriParameters (data) {
  return Object.keys(data).map(function (k) {
    if (_.isArray(data[k])) {
      var keyE = encodeURIComponent(k + '[]');
      return data[k].map(function (subData) {
        return keyE + '=' + encodeURIComponent(subData);
      }).join('&');
    } else {
      return encodeURIComponent(k) + '=' + encodeURIComponent(data[k]);
    }
  }).join('&');
};

2voto

Steve Chambers Points 3303

La conversion d'une chaîne JSON en une chaîne de requête URL peut être faite en une seule ligne :

const json = '{"action":"actualiza_resultado","postID":1,"gl":2,"gl2":3}';
const queryString = new URLSearchParams(JSON.parse(json)).toString();

queryString serait alors défini sur "action=actualiza_resultado&postID=1&gl=2&gl2=3".

1voto

sandman Points 96

Meilleure solution pour Vanilla JavaScript :

var params = Object.keys(data)
  .filter(function (key) {
    return data[key] ? true : false
  })
  .map(function (key) {
    return encodeURIComponent(key) + '=' + encodeURIComponent(data[key])
  })
  .join('&');

PS : Le filtre est utilisé ici pour supprimer les paramètres nuls ou indéfinis. Cela rend l'URL plus propre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X