解析jquery param
发布时间:2020-12-17 17:30:42 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 # -*- coding: utf-8 -*-'''orgin from https://bitbucket.org/k_bx/jquery-unparamnow more json-like struct. make it work with list well!auther:
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 # -*- coding: utf-8 -*- ''' orgin from https://bitbucket.org/k_bx/jquery-unparam now more json-like struct. make it work with list well! auther: [email?protected] ''' import re import urlparse from itertools import izip_longest def parse_key_pair(key,val): groups = re.findall(r"[.*?]",key) groups_joined = ''.join(groups) if key[-len(groups_joined):] == groups_joined: key = key[:-len(groups_joined)] for group in reversed(groups): index = re.match("d+",group[1:-1]) if group == '[]': val = [val] elif index: index = int(index.group()) res = [None]*(index+1) res[index] = val val = res else: val = {group[1:-1]: val} return {key: val} def merge_two_structs(s1,s2): if isinstance(s1,list) and isinstance(s2,list): new_array =[] for item,item2 in izip_longest(s1,s2): if(item): if(item2): new_item = merge_two_structs(item,item2) new_array.append(new_item) else: new_array.append(item) else: new_array.append(item2) return new_array if isinstance(s1,dict) and isinstance(s2,dict): retval = s1.copy() for key,val in s2.iteritems(): if retval.get(key) is None: retval[key] = val else: retval[key] = merge_two_structs(retval[key],val) return retval return s2 def merge_structs(structs): if len(structs) == 0: return None if len(structs) == 1: return structs[0] first,rest = structs[0],structs[1:] return merge_two_structs(first,merge_structs(rest)) def jquery_unparam_unquoted(jquery_params): pair_strings = jquery_params.split('&') key_pairs = [parse_key_pair(x) for x in pair_strings] return merge_structs(key_pairs) def jquery_unparam(jquery_params): key_value_pairs= urlparse.parse_qsl(test_str) struct_list = [parse_key_pair(key,val) for key,val in key_value_pairs] result = merge_structs(struct_list) return result def _part_test1(): ##test1 key,val = 'filter[filters][0][value]','XXX' k = parse_key_pair(key,val) key2,value2 = 'filter[filters][2][operator]','TTT' k2 = parse_key_pair(key2,value2) ##test2 from itertools import izip_longest a = [1,None,{'a':22}] b = [None,2,{'b':11},6,5] new_array =[] for item,item2 in izip_longest(a,b): if(item): if(item2): new_item = merge_two_structs(item,item2) new_array.append(new_item) else: new_array.append(item) else: new_array.append(item2) print item,item2 if __name__ == '__main__': ''' take:2 skip:0 page:1 pageSize:2 sort[0][field]:tKeywords sort[0][dir]:desc sort[1][field]:tTitle sort[1][dir]:asc filter[logic]:and filter[filters][0][field]:EmployeeID filter[filters][0][operator]:eq filter[filters][0][value]:XXX group[0][field]:tTitle group[0][dir]:desc ''' test_str = "take=2&skip=0&page=1&pageSize=2&sort%5B0%5D%5Bfield%5D=tKeywords&sort%5B0%5D%5Bdir%5D=desc&sort%5B1%5D%5Bfield%5D=tTitle&sort%5B1%5D%5Bdir%5D=asc&filter%5Blogic%5D=and&filter%5Bfilters%5D%5B0%5D%5Bfield%5D=EmployeeID&filter%5Bfilters%5D%5B0%5D%5Boperator%5D=eq&filter%5Bfilters%5D%5B0%5D%5Bvalue%5D=XXX&group%5B0%5D%5Bfield%5D=tTitle&group%5B0%5D%5Bdir%5D=desc" print jquery_unparam(test_str) # {'sort': [{'field': 'tKeywords','dir': 'desc'},{'field': 'tTitle','dir': 'asc'}],'group': [{'field': 'tTitle','dir': 'desc'}],'pageSize': '2','skip': '0','filter': {'filters': [{'operator': 'eq','field': 'EmployeeID','value': 'XXX'}],'logic': 'and'},'take': '2','page': '1'} 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |