I'm trying to urlencode an dictionary in python with urllib.urlencode. The problem is, I have to encode an array.
The result needs to be:
criterias%5B%5D=member&criterias%5B%5D=issue
#unquoted: criterias[]=member&criterias[]=issue
But the result I get is:
criterias=%5B%27member%27%2C+%27issue%27%5D
#unquoted: criterias=['member',+'issue']
I have tried several things, but I can't seem to get the right result.
import urllib
criterias = ['member', 'issue']
params = {
'criterias[]': criterias,
}
print urllib.urlencode(params)
If I use cgi.parse_qs
to decode a correct query string, I get this as result:
{'criterias[]': ['member', 'issue']}
But if I encode that result, I get a wrong result back. Is there a way to produce the expected result?
To abstract this out to work for any parameter dictionary and convert it into a list of tuples:
Which should now work for both the above example as well as a dictionary with some strings and some arrays as values:
You can use a list of key-value pairs (tuples):
Listcomp of values:
The solution is far simpler than the ones listed above.
Note the True. See http://docs.python.org/library/urllib.html#urllib.urlencode the doseq variable.
As a side note, you do not need the [] for it to work as an array (which is why urllib does not include it). This means that you do not not need to add the [] to all your array keys.