2010-07-22 81 views
125

我想查找有關如何序列化一個對象查詢字符串格式的信息,但我的所有搜索都溺水如何去其他方式的結果(字符串/表格/不管是JSON)。序列化對象查詢字符串在JavaScript/jQuery

{ one: 'first', two: 'second' } 

,我想

?one=first&two=second 

有沒有做到這一點的好辦法?我不介意插件或whatnots - 如果我找到的代碼是不是一個插件,我可能就重新寫一個反正...

+3

這裏有一些很好的普通JS解決方案:http://stackoverflow.com/questions/1714786/querystring-encoding-of-a-javascript-object其中有些不長於這裏的框架解決方案。 – 2015-05-10 22:28:33

回答

203

你想$.param()http://api.jquery.com/jQuery.param/

具體來說,你想這樣的:

var data = { one: 'first', two: 'second' }; 
var result = $.param(data); 

當給定這樣的事情:

{a: 1, b : 23, c : "[email protected]#st"} 

$.param將返回此:

a=1&b=23&c=te!%40%23st 
+8

請注意,如果您的對象中有一個數組,它將無法正確進行參數化。 – crv 2012-04-26 19:46:12

+2

@crv:對。在這種情況下,JSON可能是最好的 – 2012-04-28 21:23:14

+0

@crv我在我的數組中,它工作正常。 – 2012-12-04 16:52:54

12

另一種選擇可能是node-querystring

它在npmbower都可用,這就是我一直在使用它的原因。

43

對於一個快速非jQuery函數...

function jsonToQueryString(json) { 
    return '?' + 
     Object.keys(json).map(function(key) { 
      return encodeURIComponent(key) + '=' + 
       encodeURIComponent(json[key]); 
     }).join('&'); 
} 

注意這不會處理數組或嵌套對象。

+1

酷,工作!我只添加了'if(json [key]!= null)'省略了空值 – 2015-07-23 21:47:05

+1

這是一個很好的,僅限JavaScript的解決方案。可以將調用賦值給'Object.keys'到一個'params'變量和'return params.length && params.join('&')||。 「」對於對象可能爲空的情況,即'json = {}'。 – 2015-09-17 21:27:29

+0

這比'$ .param'好,因爲param編碼的形式不是urls,所以param空格變成'+'而不是'%20',這可能會導致各種問題,特別是MVC – NibblyPig 2017-04-24 11:59:58

相關問題