如何转义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和以下)。 但是,这些功能的填充会使其与更多浏览器兼容。

  • 对于数组:https://stackoverflow.com/a/2790686/467286
  • 对于object.keys:https://stackoverflow.com/a/3937321/467286
  • 链接地址: http://www.djcxy.com/p/27365.html

    上一篇: How to escape a JSON string to have it in a URL?

    下一篇: Getting Object Property Names