【发布时间】:2016-09-28 05:04:11
【问题描述】:
我有一个“深”的 JSON 字符串,需要在 URL 中作为 GET 变量传递。如下所示:
{
"meta": {
"prune": true,
"returnFields": ["gf", "gh", "gh", "rt"],
"orient": "split"
},
"indicators": [{
"type": "beta",
"computeOn": "gf",
"parameters": {
"timeperiod": 5,
"nbdevup": 2,
"nbdevdn": 2,
"matype": 0
}
}, {
"type": "alpha",
"computeOn": "gf",
"parameters": {
"timeperiod": 30
}
}]
};
使用jQuery.param编码时,结果如下:
var recursiveEncoded = jQuery.param(body);
console.log(recursiveEncoded);
meta%5Bprune%5D=true&meta%5BreturnFields%5D%5B%5D=gf&meta%5BreturnFields%5D%5B%5D=gh&meta%5BreturnFields%5D%5B%5D=gh&meta%5BreturnFields%5D%5B%5D=rt&meta%5Borient%5D=split&indicators%5B0%5D%5Btype%5D=beta&indicators%5B0%5D%5BcomputeOn%5D=gf&indicators%5B0%5D%5Bparameters%5D%5Btimeperiod%5D=5&indicators%5B0%5D%5Bparameters%5D%5Bnbdevup%5D=2&indicators%5B0%5D%5Bparameters%5D%5Bnbdevdn%5D=2&indicators%5B0%5D%5Bparameters%5D%5Bmatype%5D=0&indicators%5B1%5D%5Btype%5D=alpha&indicators%5B1%5D%5BcomputeOn%5D=gf&indicators%5B1%5D%5Bparameters%5D%5Btimeperiod%5D=30
解码如下:
var recursiveDecoded = decodeURIComponent( jQuery.param(body) );
console.log(recursiveDecoded);
meta[prune]=true&meta[returnFields][]=gf&meta[returnFields][]=gh&meta[returnFields][]=gh&meta[returnFields][]=rt&meta[orient]=split&indicators[0][type]=beta&indicators[0][computeOn]=gf&indicators[0][parameters][timeperiod]=5&indicators[0][parameters][nbdevup]=2&indicators[0][parameters][nbdevdn]=2&indicators[0][parameters][matype]=0&indicators[1][type]=alpha&indicators[1][computeOn]=gf&indicators[1][parameters][timeperiod]=30
如果只是在服务器上使用序列化字符串结果,将字符串作为键值对中的键:
"query": {
"{\"meta\":{\"prune\":true,\"returnFields\":[\"gf\",\"gh\",\"gh\",\"rt\"],\"orient\":\"split\"},\"indicators\":[{\"type\":\"beta\",\"computeOn\":\"gf\",\"parameters\":{\"timeperiod\":5,\"nbdevup\":2,\"nbdevdn\":2,\"matype\":0}},{\"type\":\"alpha\",\"computeOn\":\"gf\",\"parameters\":{\"timeperiod\":30}}]}": ""
},
我的后端处理是用 Python 完成的。存在哪些模块可以将上述结果转换为类似于原始对象的dict?
【问题讨论】:
-
您最好将其作为 JSON 发送,然后将其反序列化为 Python 中的对象。这样就不那么乱了。
-
要求是作为GET请求发送。我已经完成了可以处理 JSON 字符串的 POST 请求。
-
您可以使用 GET 方法在 jQuery 中发送一个对象,而无需使用
$.param()。如果您确保您的数据在服务器上也以 JSON 格式结束,作为您的 AJAX 请求的结果,那么您应该没问题。在最坏的情况下,您必须将dataType设置为'json'。 -
@strimp 然后 URL 编码一个序列化的 JSON 字符串并将其作为单个 GET 参数发送。一样的区别。我从来没有说过任何关于 POST 的事情。 :) 是否有一些要求将其拆分为您无法控制的不同查询字符串值?
-
@haliphax 是的,我明白你的意思,这可以工作。我可以使用 Python 的
json.loads方法来解析字符串服务器端。留下答案,如果作品将投票并接受。
标签: javascript jquery python json