[javascript] Javascript 객체의 쿼리 문자열 인코딩

Javascript 객체를 요청을 string통해 전달할 수 있는 빠르고 간단한 방법으로 알고 GET있습니까?

아니 jQuery, 다른 프레임 워크는 없습니다-평범한 자바 스크립트 🙂



답변

이처럼?

serialize = function(obj) {
  var str = [];
  for (var p in obj)
    if (obj.hasOwnProperty(p)) {
      str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
    }
  return str.join("&");
}

console.log(serialize({
  foo: "hi there",
  bar: "100%"
}));
// foo=hi%20there&bar=100%25

편집 : 이것도 재귀 객체를 변환합니다 (쿼리 문자열에 PHP “배열”표기법 사용)

serialize = function(obj, prefix) {
  var str = [],
    p;
  for (p in obj) {
    if (obj.hasOwnProperty(p)) {
      var k = prefix ? prefix + "[" + p + "]" : p,
        v = obj[p];
      str.push((v !== null && typeof v === "object") ?
        serialize(v, k) :
        encodeURIComponent(k) + "=" + encodeURIComponent(v));
    }
  }
  return str.join("&");
}

console.log(serialize({
  foo: "hi there",
  bar: {
    blah: 123,
    quux: [1, 2, 3]
  }
}));
// foo=hi%20there&bar%5Bblah%5D=123&bar%5Bquux%5D%5B0%5D=1&bar%5Bquux%5D%5B1%5D=2&bar%5Bquux%5D%5B2%5D=3


답변

jQuery에는이를위한 기능이 jQuery.param()있습니다. 이미 사용중인 경우 다음을 사용할 수 있습니다.
http://api.jquery.com/jquery.param/

예:

var params = { width:1680, height:1050 };
var str = jQuery.param( params );

str 이제 포함 width=1680&height=1050


답변

그냥 사용하십시오 URLSearchParams이것은 모든 현재 브라우저에서 작동합니다

new URLSearchParams(object).toString()


답변

Object.keys(obj).reduce(function(a,k){a.push(k+'='+encodeURIComponent(obj[k]));return a},[]).join('&')

편집 : 나는이 한 줄짜리를 좋아하지만 허용 된 대답과 의미 적으로 일치하면 더 인기있는 답변 일 것입니다.

function serialize( obj ) {
    let str = '?' + Object.keys(obj).reduce(function(a, k){
        a.push(k + '=' + encodeURIComponent(obj[k]));
        return a;
    }, []).join('&');
    return str;
}


답변

ES6의 하나의 라이너는 다음과 같습니다.

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


답변

Node.js v6.6.3 사용

const querystring = require('querystring')

const obj = {
  foo: 'bar',
  baz: 'tor'
}

let result = querystring.stringify(obj)
// foo=bar&baz=tor

참조 : https://nodejs.org/api/querystring.html


답변

URLSearchParams인터페이스를 사용하는 것이 좋습니다 .

const searchParams = new URLSearchParams();
const search = {foo: "hi there", bar: "100%" };
Object.keys(search).forEach(key => searchParams.append(key, search[key]));
console.log(searchParams.toString())

또는 검색 객체를 다음과 같이 생성자에 전달하여 :

const obj = {foo: "hi there", bar: "100%" };
const params = new URLSearchParams(obj).toString();