=1.4: $-6ren">
gpt4 book ai didi

javascript - 在 python/flask 中解码使用 jquery 的 $.param() 序列化的嵌套对象

转载 作者:太空宇宙 更新时间:2023-11-03 15:31:41 27 4
gpt4 key购买 nike

Jquery 的 param 允许您对嵌套对象进行编码以通过 get 参数进行传输:

$.param({ a: [ 2, 3, 4 ] }); // "a=2&a=3&a=4"
// >=1.4:
$.param({ a: [ 2, 3, 4 ] }); // "a[]=2&a[]=3&a[]=4"

// <=1.3.2:
$.param({ a: { b: 1, c: 2 }, d: [ 3, 4, { e: 5 } ] });
// "a=[object+Object]&d=3&d=4&d=[object+Object]"

// >=1.4:
$.param({ a: { b: 1, c: 2 }, d: [ 3, 4, { e: 5 } ] });
// "a[b]=1&a[c]=2&d[]=3&d[]=4&d[2][e]=5"

如何在 Python 中解码这个列表/字典?作为替代方案,是否有任何其他序列化适用于在 Javascript 和 Python 中实现的嵌套对象?

最佳答案

对于列表中的简单值,如 $.param({ a: [ 2, 3, 4 ] }),请使用 request.args.getlist("a[]")

对于$.param({d:{foo:123, bar:456}}),使用:

def get_jquery_dict(args, key):
needle = re.compile(r"^{}\[(\w+)\](.*)$".format(key))
d = MultiDict()
for k, v in args.items(multi=True):
m = needle.match(k)
if not m:
continue
key = m.group(1) + m.group(2)
d.add(key, v)
return d

get_jquery_dict(request.args, 'd')

这适用于 dicts 中的 dict ($.param({outer:{inner:{foo: 123, bar:456}}})):

# ?outer[inner][foo]=123&outer[inner][bar]=456
outer = get_jquery_dict(request.args, 'outer')
inner = get_jquery_dict(outer, 'inner')

并在字典中列出 ($.param({foo: {bar: [10,20,30]}})):

# ?foo[bar][]=10&foo[bar][]=20&foo[bar][]=30
foo = get_jquery_dict(request.args, 'foo')
bar = foo.getlist('bar[]')

对于列表中的字典 ([3, 4, { e: 5 }]),欢迎您修改上面的代码并创建一个 get_jquery_list() 函数,或者稍微修改你的数据结构以避免它们:-)

关于javascript - 在 python/flask 中解码使用 jquery 的 $.param() 序列化的嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42854569/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com