JavaScript对象(JSON)转换为URL字符串格式。

20

我有一个看起来像这样的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);
};

然而,使用原生 JavaScript 应该有更好的方法吧?

谢谢


3
确实是“本地JS”。你唯一忘记的是对每个参数名及其值(分别)调用escapeURIComponent - Pointy
哦,如果你的任何属性可能具有数组值或子对象值,那么你的代码必须以某种方式处理它(具体取决于服务器的期望)。 - Pointy
2
请参考https://dev59.com/nWUq5IYBdhLWcg3waPpC以及其他相关问题。 - georg
@thg435 +1,跟我的解决方案一模一样! - Tibos
@Tibos:请注意,它不处理嵌套。 - georg
显示剩余2条评论
1个回答

47

2018 update

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"

+1 @Pointy 对于 encodeURIComponent


太好了!那帮了很大的忙。 - Rentrop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接