70 votes

Convertir un objet JavaScript en une chaîne de caractères codée en URI

J'ai obtenu un objet JavaScript que j'aimerais récupérer x-www-form-urlencoded .

Quelque chose comme $('#myform').serialize() mais pour les objets.

L'objet suivant :

{
    firstName: "Jonas",
    lastName: "Gauffin"
}

serait encodé en :

firstName=Jonas&lastName=Gauffin (veuillez noter que les caractères spéciaux doivent être encodés correctement)

0 votes

Demandé auparavant : stackoverflow.com/questions/3848340/

0 votes

Veuillez fournir un exemple d'entrée et de sortie. Si vous souhaitez simplement encoder du JSON, encodeURIComponent(json) devrait suffire.

4voto

BaseZen Points 6460

Même effet que ci-dessus, mais le style fonctionnel donne une expression élégante: :

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

3voto

Curt Points 69

Pour information, la réponse acceptée n'inclut pas la prise en charge des objets imbriqués. Voici une façon d'y parvenir :

function xwwwfurlenc(srcjson, parent=""){
    if(typeof srcjson !== "object")
      if(typeof console !== "undefined"){
        console.log("\"srcjson\" is not a JSON object");
        return null;
    }

    let u = encodeURIComponent;
    let urljson = "";
    let keys = Object.keys(srcjson);

    for(let i=0; i < keys.length; i++){
      let k = parent ? parent + "[" + keys[i] + "]" : keys[i];

      if(typeof srcjson[keys[i]] !== "object"){
        urljson += u(k) + "=" + u(srcjson[keys[i]]);
      } else {
        urljson += xwwwfurlenc(srcjson[keys[i]], k)
      }
      if(i < (keys.length-1))urljson+="&";
    }

    return urljson;
}

2voto

johnny 5 Points 6628

Pour compléter la réponse de @Claymore, voici une fonction permettant d'encoder un objet et d'omettre l'esperluette de fin :

encodeObject(params) {
  var query = [];
  for (let key in params) {
    let val = encodeURIComponent(key) + "=" + encodeURIComponent(params[key]);
    query.push(val);
  }
  return query.join('&');
}

1voto

Udhaya Points 189
function jsonToURI(jsonObj) {
    var output = '';
    var keys = Object.keys(jsonObj);
    keys.forEach(function(key) {
        output = output + key + '=' + jsonObj[key] + '&';
    })
    return output.slice(0, -1);
}

function uriToJSON(urijson) {
    var output = {};
    urijson = decodeURIComponent(urijson);
    urijson = urijson.split('&');
    urijson.forEach(function(param) {
        var param = param.split('=');
        output[param[0]] = param[1];
    })
    return output
}

0voto

Vaibhav C Points 1

let urlParameters = Object.entries(data).map(e => e.join('=')).join('&');

Essayez d'utiliser ceci.

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