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

IT技术 javascript jquery serialization query-string
2021-02-09 12:58:10

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

我有

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

而且我要

?one=first&two=second

有没有好的方法可以做到这一点?我不介意插件或诸如此类的东西——如果我找到的代码不是插件,我可能无论如何都会将它重写为一个......

4个回答

你想要$.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
这不适用于 asp.net 4.0,因为&在查询字符串中没有您专门设置您的requestValidationMode="2.0"
2021-03-22 12:58:10
@crv:对。在这种情况下,JSON 可能是最好的
2021-03-25 12:58:10
请注意,如果您的对象中有一个数组,则它不会正确参数化。
2021-03-26 12:58:10
它不能正确处理嵌套对象。
2021-04-01 12:58:10
@crv 我有一个数组,它工作正常。
2021-04-10 12:58:10

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

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

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

这比$.param因为 param 为表单而不是 url 编码更有效,因此使用 param space+代替%20which 会导致各种问题,尤其是对于 MVC
2021-03-15 12:58:10
酷,有效!我只添加if ( json[key] != null )了省略空值
2021-03-26 12:58:10
对于简单的 JavaScript 对象,使用 ES6 是一个非常干净整洁的解决方案gist.github.com/magician11/c16ae65cacd5cdb793f5f8215c1ef811
2021-03-31 12:58:10
jsonToQueryString({ query: true, options: { nested: true }}) 是返回对象[对象] :( ?query=true&options=%5Bobject%20Object%5D
2021-04-03 12:58:10
这是一个不错的、仅支持 JavaScript 的解决方案。人们可以调用分配给Object.keys一个params变量,并return params.length && params.join('&') || ""为其中的对象可能是空的情况下,即json={}
2021-04-05 12:58:10

另一种选择可能是node-querystring

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

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

例如:

var data = { one: 'first', two: 'second' };
var result = Y.QueryString.stringify(data);
它不再维护。
2021-04-05 12:58:10