How to use HTTPClient.query_string_from_dict() method recursively

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By longness
:warning: Old Version Published before Godot 3 was released.

I have a query parameters array like

var query = {
	'firm': 1
	, 'type': 2
    	, 'duedate' : {
		'start':01-01-1970
		, 'end':02-06-2016
	}
}

I expect it to be encoded like

?duedate[end]=02-06-2016&duedate[start]=01-01-1970&firm=1&type=2

But output is like below

?duedate=%28end%3A02-06-2016%29%2C%20%28start%3A01-01-1970%29&firm=1&type=2

What am I missing?

:bust_in_silhouette: Reply From: longness

I have coded a recursive function in GDscript to make this work. It is a bit hacky but may be useful.

func recursive_encode_parameters(query, parents = []):
	var parents_orj = []
	for parent in parents:
		parents_orj.append(parent)
	for key in query:
		var parameter = ''
		parents = []
		for parent in parents_orj:
			parents.append(parent)
		var value = query[key]
		parents.append(str(key))
		if(typeof(value) == TYPE_DICTIONARY):
			recursive_encode_parameters(query[key], parents)
		else:
			var idx = 0
			for parent in parents:
				var quotedparent = HTTPClient.query_string_from_dict({'':parent}).right(1)
				if(idx == 0):
					parameter = quotedparent + parameter
				else:
					parameter = parameter + '[' + quotedparent + ']'
				idx = idx + 1
			parameter = parameter + HTTPClient.query_string_from_dict({'':value})
			parameters.append(parameter)