如何转义JSON字符串以将其放入URL中?
使用Javascript,我想生成一个页面的链接。 该页面的参数位于我用JSON序列化的Javascript数组中。
所以我想生成一个这样的URL:
http://example.com/?data="MY_JSON_ARRAY_HERE"
我如何需要转义我的JSON字符串(数组序列化)以将其作为参数包含在URL中?
如果有使用JQuery的解决方案,我很乐意。
注意:是的,页面的参数需要在一个数组中,因为它们有很多。 我想我会使用bit.ly来缩短链接。
encodeURIComponent(JSON.stringify(object_to_be_serialised))
您可以使用encodeURIComponent
安全地对一部分查询字符串进行URL编码:
var array = JSON.stringify([ 'foo', 'bar' ]);
var url = 'http://example.com/?data=' + encodeURIComponent(array);
或者如果您将此作为AJAX请求发送:
var array = JSON.stringify([ 'foo', 'bar' ]);
$.ajax({
url: 'http://example.com/',
type: 'GET',
data: { data: array },
success: function(result) {
// process the results
}
});
我期待着做同样的事情。 问题是我的网址变得太长了。 我今天使用Bruno Jouhier的jsUrl.js库找到了一个解决方案。
我还没有完全测试它。 但是,下面是一个使用3种不同方法编码同一个大对象后显示字符串输出字符长度的示例:
jQuery.param
2651个字符 JSON.stringify + encodeURIComponent
1691个字符 JSURL.stringify
821个字符 显然JSURL为urlEncoding一个js对象提供了最优化的格式。
https://groups.google.com/forum/?fromgroups=#!topic/nodejs/ivdZuGCF86Q上的主题显示了编码和解析的基准。
注意 :测试之后,它看起来像jsurl.js库使用ECMAScript 5函数,如Object.keys,Array.map和Array.filter。 因此,它只适用于现代浏览器(不支持8和以下)。 但是,这些功能的填充会使其与更多浏览器兼容。