序列化对象以在 JavaScript/jQuery 中查询字符串 [重复]

Posted

技术标签:

【中文标题】序列化对象以在 JavaScript/jQuery 中查询字符串 [重复]【英文标题】:Serialize object to query string in JavaScript/jQuery [duplicate] 【发布时间】:2011-03-19 12:58:42 【问题描述】:

我正在尝试查找有关如何将对象序列化为查询字符串格式的信息,但我所有的搜索都淹没在有关如何采用另一种方式(字符串/表单/JSON 的任何内容)的结果中。

我有

 one: 'first', two: 'second' 

我想要

?one=first&two=second

有什么好办法吗?我不介意插件或诸如此类的东西 - 如果我找到的代码不是插件,我可能会重新编写它......

【问题讨论】:

这里有一些不错的纯 JS 解决方案:***.com/questions/1714786/… 其中一些并不比这里的框架解决方案长。 【参考方案1】:

另一个选项可能是node-querystring。

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

【讨论】:

【参考方案2】:

对于一个快速的非 JQuery 函数...

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

请注意,这不处理数组或嵌套对象。

【讨论】:

酷,工作!我只添加了if ( json[key] != null ) 来省略空值 这是一个不错的纯 javascript 解决方案。对于对象可能为空的情况,例如 json=,可以将调用 Object.keys 分配给 params 变量和 return params.length && params.join('&') || "" 这比$.param 效果更好,因为param 对表单而不是url 进行编码,所以param space 变成+ 而不是%20 这可能会导致各种问题,尤其是使用MVC 使用 ES6 对于简单的 JavaScript 对象来说这是一个非常干净整洁的解决方案gist.github.com/magician11/c16ae65cacd5cdb793f5f8215c1ef811 jsonToQueryString( query: true, options: nested: true ) 是返回对象[Object] :( ?query=true&options=%5Bobject%20Object%5D【参考方案3】:

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

具体来说,你想要这个:

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

当给出这样的东西时:

a: 1, b : 23, c : "te!@#st"

$.param 会返回这个:

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

【讨论】:

请注意,如果您的对象中有一个数组,则它不会被正确参数化。 @crv:对。在这种情况下,JSON 可能是最好的 @crv 我有一个数组,它工作正常。 这不适用于 asp.net 4.0,因为查询字符串中的 & 没有你专门设置你的 requestValidationMode="2.0" 它不能正确处理嵌套对象。【参考方案4】:

YUI 也有http://yuilibrary.com/yui/docs/api/classes/QueryString.html#method_stringify。

例如:

var data =  one: 'first', two: 'second' ;
var result = Y.QueryString.stringify(data);

【讨论】:

不再维护了。

以上是关于序列化对象以在 JavaScript/jQuery 中查询字符串 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用JavaScript / jQuery为网站创夜间/高亮模式

使用JavaScript / jQuery为网站创夜间/高亮模式

将 JSON 反序列化为 C# 对象以在网格中将嵌套数组显示为字符串

javascript jQuery / PHP序列化表单

如何添加类型约束以在泛型方法中包含任何可序列化的内容?

javascript jQuery序列化键值对在URL查询字符串中使用