从URL参数(以字节为单位)到JSON字符串

问题描述 投票:0回答:1

我使用它从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"}

它可以工作,但是由于它涉及许多编码/解码步骤,因此我怀疑它效率低下(如果我的服务器收到许多请求)。>>

从字节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:我已经读过How to send a JSON object using html form data,但是我需要我的网站才能运行[[即使禁用了Javascript

,所以我不能100%依赖XMLHttpRequest + JSON.serialize:它只需要与一个<form>提交。据我所知,标准的HTML表单不能直接发布为JSON,对吗?我使用它从URL参数(在HTTP请求的主体中以字节形式接收)到JSON字符串:import urllib.parse,json def params_asbytes_to_json(b):s = b.decode()#字节到str x ...

您可以使用urllib.parse.parse_qs()而不是urllib.parse.parse_qsl()保存一个步骤。它返回字典而不是列表,因此您不需要dict()步骤。

但是,正如注释中指出的那样,这会将字典值设置为列表,而不是单个字符串,以允许查询字符串中有重复的键。您的版本只是丢弃重复项。

您也不需要使用b.decode()urllib.parse函数接受bytes对象并将其解码。

javascript python json xmlhttprequest urllib
1个回答
0
投票
您可以使用urllib.parse.parse_qs()而不是urllib.parse.parse_qsl()保存一个步骤。它返回字典而不是列表,因此您不需要dict()步骤。
© www.soinside.com 2019 - 2024. All rights reserved.