Je pense que le code ci-dessous peut être ce que vous voulez
import urllib.parse
def url_encoder(params):
g_encode_params = {}
def _encode_params(params, p_key=None):
encode_params = {}
if isinstance(params, dict):
for key in params:
encode_key = '{}[{}]'.format(p_key,key)
encode_params[encode_key] = params[key]
elif isinstance(params, (list, tuple)):
for offset,value in enumerate(params):
encode_key = '{}[{}]'.format(p_key, offset)
encode_params[encode_key] = value
else:
g_encode_params[p_key] = params
for key in encode_params:
value = encode_params[key]
_encode_params(value, key)
if isinstance(params, dict):
for key in params:
_encode_params(params[key], key)
return urllib.parse.urlencode(g_encode_params)
if __name__ == '__main__':
params = {'name': 'interface_name', 'interfaces': [{'interface': 'inter1'}, {'interface': 'inter2'}]}
print(url_encoder(params))
la sortie est
interfaces%5B1%5D%5Binterface%5D=inter2&name=interface_name&interfaces%5B0%5D%5Binterface%5D=inter1
qui ressemble à
interfaces[1][interface]=inter2&name=interface_name&interfaces[0][interface]=inter1
PS: vous pouvez utiliser OrderDict
pour remplacer dict
ci-dessus
Pourquoi le devrait-il? Ce n'est en aucun cas un format standard. La chose avec les crochets est une particularité spécifique à PHP qui n'est pas présente dans la plupart des autres langages/frameworks ou standards web. – bobince
Il ne s'agit peut-être pas d'un standard pur-macaroni soutenu par l'IETF/W3C, mais il est si couramment utilisé de nos jours qu'il n'est pas inclus dans la bibliothèque standard de Python. J'ai développé des applications web dans un certain nombre de plates-formes et de langues, et cela a toujours été la convention. Et cela inclut les environnements basés sur Python tels que Django: donc non, ce n'est plus seulement une chose PHP. – pablobm
Juste pour que les gens qui viennent ici plus tard soient au courant, ce code est proche du travail mais ne fonctionne pas pour les objets avec> 1 niveau d'imbrication. Ainsi, les objets avec un niveau d'imbrication supérieur à 1 sont ramenés en haut du hachage. –