将 javascript 对象转换为 URL 参数

问题描述 投票:0回答:6

我意识到,从根本上说,我可能会以错误的方式处理这件事,所以我愿意接受任何朝着正确方向发展的推动。

我正在尝试使用 HipChat API 向房间发送通知,如下所示:

https://www.hipchat.com/docs/api/method/rooms/message

我正在尝试使用 js 对象的参数构建示例中的 URL,所以基本上我正在尝试转换它:

var hipChatSettings = {
            format:"json",
            auth_token:token,
            room_id: 1,
            from: "Notifications",
            message: "Message"
        }

对此:

https://api.hipchat.com/v1/rooms/message?format=json&auth_token=token&room_id=1&from=Notifications&message=消息

javascript jquery url
6个回答
51
投票

你应该检查这个 jQuery.param 函数

var params = { width:1680, height:1050 };
var str = jQuery.param( params );
console.log(str);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


46
投票
Object.keys(hipChatSettings).map(function(k) {
    return encodeURIComponent(k) + "=" + encodeURIComponent(hipChatSettings[k]);
}).join('&')
// => "format=json&auth_token=token&room_id=1&from=Notifications&message=Message"

警告:新的 JavaScript。如果你想让它对古人起作用,请垫片或重写为

for


13
投票

这样的东西可能对你有用

var str = "?" + Object.keys(hipChatSettings).map(function(prop) {
  return [prop, hipChatSettings[prop]].map(encodeURIComponent).join("=");
}).join("&");

// "?format=json&auth_token=token&room_id=1&from=Notifications&message=Message"

如果您不能依赖 ECMAScript 5,您可以使用简单的 for 循环

var pairs = [];

for (var prop in hipChatSettings) {
  if (hipChatSettings.hasOwnProperty(prop)) {
    var k = encodeURIComponent(prop),
        v = encodeURIComponent(hipChatSettings[prop]);
    pairs.push( k + "=" + v);
  }
}

var str = "?" + pairs.join("&");

4
投票

ES6版本,可以用数组做真正的嵌套对象

encodeURI(getUrlString({a: 1, b: [true, 12.3, "string"]}))

getUrlString (params, keys = [], isArray = false) {
  const p = Object.keys(params).map(key => {
    let val = params[key]

    if ("[object Object]" === Object.prototype.toString.call(val) || Array.isArray(val)) {
      if (Array.isArray(params)) {
        keys.push("")
      } else {
        keys.push(key)
      }
      return getUrlString(val, keys, Array.isArray(val))
    } else {
      let tKey = key

      if (keys.length > 0) {
        const tKeys = isArray ? keys : [...keys, key]
        tKey = tKeys.reduce((str, k) => { return "" === str ? k : `${str}[${k}]` }, "")
      }
      if (isArray) {
        return `${ tKey }[]=${ val }`
      } else {
        return `${ tKey }=${ val }`
      }

    }
  }).join('&')

  keys.pop()
  return p
}

4
投票

舞会迟到了,但我很喜欢这个简短的内容:

  Object.entries(hipChatSettings)
    .map(
      ([key, val]) => `${encodeURIComponent(key)}=${encodeURIComponent(val)}`
    )
    .join("&");

0
投票

你好

`

让 url = 新 URL(主机);

让 urlParam = {

国家:“ru”,

语言:“ru”,

数量:3,

日期:“2024-10-23”,

};

for ([key, value] of new Map(Object.entries(urlParam))) {

url.searchParams.set(key, value);

}

`

© www.soinside.com 2019 - 2024. All rights reserved.