【问题标题】:JavaScript Object (JSON) to URL String FormatJavaScript 对象 (JSON) 到 URL 字符串格式
【发布时间】:2013-11-23 11:18:35
【问题描述】:

我有一个类似的 JSON 对象

{
    "version" : "22",
    "who: : "234234234234"
}

我需要将它放在一个准备好作为原始 http 正文请求发送的字符串中。

所以我需要它看起来像

version=22&who=234324324324

但目前我有无数个参数,它需要工作

app.jsonToRaw = function(object) {
    var str = "";
    for (var index in object) str = str + index + "=" + object[index] + "&";
    return str.substring(0, str.length - 1);
};

但是在原生 js 中一定有更好的方法来做到这一点?

谢谢

【问题讨论】:

  • 那个“原生JS”。您唯一忘记的是对每个参数名称及其值(分别)调用escapeURIComponent
  • 哦,如果您的任何属性可能具有数组值或子对象的值,那么您的代码将不得不以某种方式处理它(具体如何取决于您的服务器期望)。
  • stackoverflow.com/q/14525178/989121 和许多其他人。
  • @thg435 +1 与我的解决方案相同(信中!)
  • @Tibos:注意它不处理嵌套。

标签: javascript json xmlhttprequest native


【解决方案1】:

2018 年更新

var obj = {
    "version" : "22",
    "who" : "234234234234"
};

const queryString = Object.entries(obj).map(([key, value]) => {
    return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
}).join('&');

console.log(queryString); // "version=22&who=234234234234"

原帖

您的解决方案非常好。一个看起来更好的可能是:

var obj = {
    "version" : "22",
    "who" : "234234234234"
};

var str = Object.keys(obj).map(function(key){ 
  return encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]); 
}).join('&');

console.log(str); //"version=22&who=234234234234"

encodeURIComponent+1 @Pointy

【讨论】:

  • 太棒了!这很有帮助
猜你喜欢
  • 2012-10-08
  • 2013-04-21
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
  • 2013-03-29
  • 2020-06-18
  • 1970-01-01
相关资源
最近更新 更多