Credo che il codice qui sotto può essere ciò che si desidera
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))
l'uscita è
interfaces%5B1%5D%5Binterface%5D=inter2&name=interface_name&interfaces%5B0%5D%5Binterface%5D=inter1
che è simile
interfaces[1][interface]=inter2&name=interface_name&interfaces[0][interface]=inter1
PS: si può decidere utilizzare OrderDict
per sostituire dict
sopra
fonte
2017-04-11 13:15:54
Perché dovrebbe? Questo non è in alcun modo un formato standard. La cosa con le parentesi quadre è una peculiarità specifica di PHP non presente nella maggior parte degli altri linguaggi/framework o standard web. – bobince
Potrebbe non essere uno standard santo-macaronese supportato da IETF/W3C puro sangue, ma è così comunemente usato al giorno d'oggi che il suo non essere incluso nella libreria standard di Python sfugge alla mia comprensione. Ho sviluppato applicazioni Web in un certo numero di piattaforme e lingue, e questa è sempre stata la convenzione. E questo include ambienti basati su Python come Django: così no, non è più una cosa solo per PHP. – pablobm
Solo così le persone che vengono qui in seguito sono consapevoli, questo codice si avvicina al funzionamento ma non funziona per oggetti con> 1 livello di nidificazione. Quindi gli oggetti con> 1 livello di nidificazione tornano in cima all'hash. –