Я использую это для go от параметров URL (полученных в виде байтов в теле HTTP-запроса) до JSON строки:
import urllib.parse, json
def params_asbytes_to_json(b):
s = b.decode() # bytes to str
x = urllib.parse.parse_qsl(s) # parse_qsl
d = dict(x) # convert to dict
return json.dumps(d) # convert to string with json
print(params_asbytes_to_json(b'a=b&c=d')) # {"a": "b", "c": "d"}
Это работает, но так как задействует многие кодировки / шаги декодирования, я подозреваю, что это неэффективно (если мой сервер получает много запросов).
Есть ли короче / быстрее go от байтов a=b&c=d
до JSON строки {"a": "b", "c": "d"}
?
PS: эти данные отправляются с HTML <form>
следующим образом:
<form action='/do' method='post'>
<input type='text' name='a' value='b'>
<input type='submit'>
</form>
и, для других страниц, через (Vanilla) Javascript:
var xhr = new XMLHttpRequest();
xhr.open("POST", "/do");
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
var fd = new FormData(document.querySelector('form'));
fd.append('dt', +new Date());
xhr.send(new URLSearchParams(fd).toString());
PS: я уже прочитал Как отправить JSON объект, используя html данные формы , но мне нужен мой веб-сайт для работы даже если Javascript отключен , поэтому я не могу на 100% полагаться на XMLHttpRequest + JSON .serialize: он должен работать только с отправкой <form>
. Насколько я знаю, стандартная форма HTML не может публиковаться напрямую как JSON, верно?