我需要将json对象转换为url形式,如:"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, "");
Run Code Online (Sandbox Code Playgroud)
但我想知道在javascript或JSON对象中是否有任何函数来执行此操作?
geo*_*org 106
param就是这么做的.如果你不使用jquery,请查看源代码.
如果你真的热衷于重新发明车轮,那就是这样的:
url = Object.keys(data).map(function(k) {
return encodeURIComponent(k) + '=' + encodeURIComponent(data[k])
}).join('&')
Run Code Online (Sandbox Code Playgroud)
Tar*_*req 21
使用ES6语法:
var data = {
'action':'actualiza_resultado',
'postID': 1,
'gl': 2,
'gl2' : 3
};
let urlParameters = Object.entries(data).map(e => e.join('=')).join('&');
console.log(urlParameters);Run Code Online (Sandbox Code Playgroud)
我做了一个支持嵌套对象和数组的实现,即
var data = {
users: [
{
"name": "jeff",
"tasks": [
"Do one thing",
"Do second thing"
]
},
{
"name": "rick",
"tasks": [
"Never gonna give you up",
"Never gonna let you down"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
将会:
users[0][name]=jeff&users[0][tasks][0]=Do%20one%20thing&users[0][tasks][1]=Do%20second%20thing&users[1][name]=rick&users[1][tasks][0]=Never%20gonna%20give%20you%20up&users[1][tasks][1]=Never%20gonna%20let%20you%20down
Run Code Online (Sandbox Code Playgroud)
所以,这是实现:
var data = {
users: [
{
"name": "jeff",
"tasks": [
"Do one thing",
"Do second thing"
]
},
{
"name": "rick",
"tasks": [
"Never gonna give you up",
"Never gonna let you down"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
您不需要序列化此对象文字.
更好的方法是这样的:
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"
Run Code Online (Sandbox Code Playgroud)
就像@georg 所说的那样,您可以将JQuery.param用于平面对象。
如果您需要处理复杂的对象,您可以使用JsonUri,这是一个可以做到这一点的 Python 包。它也有 JavaScript 库
免责声明:我是 JSONURI 的作者
编辑:我后来了解到你也可以只对你的负载进行 base64 编码 - 大多数语言都支持 base64 编码/解码
例子
x = {name: 'Petter', age: 47, places: ['Mozambique', 'Zimbabwe']}
stringRep = JSON.stringify(x)
encoded = window.btoa(stringRep)
Run Code Online (Sandbox Code Playgroud)
为您提供eyJuYW1lIjoiUGV0dGVyIiwiYWdlIjo0NywicGxhY2VzIjpbIk1vemFtYmlxdWUiLCJaaW1iYWJ3ZSJdfQ==,您可以将其用作 uri 参数
decoded = window.atob(encoded)
originalX = JSON.parse(decoded)
Run Code Online (Sandbox Code Playgroud)
不用说,它有自己的警告
我发现在ES6中看起来不错:
function urlfy(obj) {
return Object
.keys(obj)
.map(k => `${encodeURIComponent(k)}=${encodeURIComponent(obj[k])}`)
.join('&');
}
Run Code Online (Sandbox Code Playgroud)
以后更新(相同的东西,也许更干净):
const urlfy = obj => Object
.keys(obj)
.map(k => encodeURIComponent(k) + '=' + encodeURIComponent(obj[k]))
.join('&');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
66128 次 |
| 最近记录: |