有没有任何原生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('&'); };