有没有任何原生function转换json到url参数?

我需要将json对象转换为urlforms,如:“parameter = 12&asd = 1”

我完成了这个:

var data = { 'action':'actualiza_resultado', 'postID': 1, 'gl': 2, 'gl2' : 3 }; var string_=JSON.stringify(data); string_=string_.replace(/{/g, ""); string_=string_.replace(/}/g, ""); string_=string_.replace(/:/g, "=") string_=string_.replace(/,/g, "&"); string_=string_.replace(/"/g, ""); 

但我不知道是否有任何在JavaScript或JSON对象的function做到这一点?

jQuery.param正是这样做的。 如果你不使用jQuery,请看源代码 。

如果你真的热衷于重新发明轮子,它是这样的:

 url = Object.keys(data).map(function(k) { return encodeURIComponent(k) + '=' + encodeURIComponent(data[k]) }).join('&') 

使用ES6语法:

 var data = { 'action':'actualiza_resultado', 'postID': 1, 'gl': 2, 'gl2' : 3 }; let urlParameters = Object.keys(data).map(i => `${i}=${data[i]}`).join('&') console.log(urlParameters); 

你不需要序列化这个对象字面值。

更好的方法是这样的:

 function getAsUriParameters(data) { var url = ''; for (var prop in data) { url += encodeURIComponent(prop) + '=' + encodeURIComponent(data[prop]) + '&'; } return url.substring(0, url.length - 1) } getAsUriParameters(data); //"action=actualiza_resultado&postID=1&gl=2&gl2=3" 

但我不知道在JavaScript中是否有任何function

核心没有任何内容。

或JSON做到这一点?

JSON是一种数据格式。 它根本没有function。


这是一个相对平凡的问题,至less对于平面数据结构来说是至关重要的。

不要将对象编码为JSON,然后:

 function obj_to_query(obj) { var parts = []; for (var key in obj) { if (obj.hasOwnProperty(key)) { parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key])); } } return "?" + parts.join('&'); } alert(obj_to_query({ 'action': 'actualiza_resultado', 'postID': 1, 'gl': 2, 'gl2': 3 })); 

没有一种标准的方法来编码复杂的数据结构(例如嵌套的对象或数组)。 要扩展它来模拟PHP方法(字段名中有方括号)或类似的东西并不难。

就像@georg所说的,你可以使用JQuery.param作为平面对象。

如果你需要处理复杂的对象,你可以使用JsonUri ,这是一个Python包。 还有一个JavaScript库

免责声明:我是JSONURI的作者

这个通过把name改成多个name[]处理数组name[]

 function getAsUriParameters (data) { return Object.keys(data).map(function (k) { if (_.isArray(data[k])) { var keyE = encodeURIComponent(k + '[]'); return data[k].map(function (subData) { return keyE + '=' + encodeURIComponent(subData); }).join('&'); } else { return encodeURIComponent(k) + '=' + encodeURIComponent(data[k]); } }).join('&'); };