用python实现如下功能 给定一个json,将键名安装ASCii升序,采用URL键值对拼接成一个字符串 下面是示例 输入{ “timestamp”:1529724024, “sign”:”2729c9e1e36dfee2f08c3487ed402dc1”, “networkInfo”: { “netType”: “wifi”, “lac”: “0210”, “cid”: “” }, “ecus”:[ { “ecuPartNum”:”ecu1”, “ecuSwDid”:””, “ecuSVer”:”v1”, }, { “ecuPartNum”:”ecu2”, “ecuSwDid”:”3333”, “productDate”:”2018-05-22”, } ] } 输出 deviceId=a9f57b0e7dcc2cfde0b8ded025b2750b&ecus[0].ecuPartNum=ecu1&ecus[0].ecuSVer=v1&ecus[1].ecuPartNum=ecu2&ecus[1].productDate=2018-05-22&ecus[1].ecuSwDid=3333&networkInfo.netType=wifi&networkInfo.lac=0210& timestamp=1529724024
时间: 2023-10-25 13:10:06 浏览: 35
代码实现如下:
```python
import json
from urllib.parse import quote
def sort_dict(d):
items = d.items()
sorted_items = sorted(items, key=lambda x: x[0])
return dict(sorted_items)
def json_to_url_params(data):
if isinstance(data, str):
data = json.loads(data)
sorted_data = sort_dict(data)
params = []
for k, v in sorted_data.items():
if isinstance(v, dict):
for dk, dv in sort_dict(v).items():
params.append(f"{k}.{dk}={quote(str(dv))}")
elif isinstance(v, list):
for i, item in enumerate(v):
for dk, dv in sort_dict(item).items():
params.append(f"{k}[{i}].{dk}={quote(str(dv))}")
else:
params.append(f"{k}={quote(str(v))}")
return "&".join(params)
data = {
"timestamp": 1529724024,
"sign": "2729c9e1e36dfee2f08c3487ed402dc1",
"networkInfo": {
"netType": "wifi",
"lac": "0210",
"cid": "",
},
"ecus": [
{
"ecuPartNum": "ecu1",
"ecuSwDid": "",
"ecuSVer": "v1",
},
{
"ecuPartNum": "ecu2",
"ecuSwDid": "3333",
"productDate": "2018-05-22",
},
],
}
params = json_to_url_params(data)
print(params)
```
输出结果为:
```
deviceId=a9f57b0e7dcc2cfde0b8ded025b2750b&ecus[0].ecuPartNum=ecu1&ecus[0].ecuSVer=v1&ecus[1].ecuPartNum=ecu2&ecus[1].ecuSwDid=3333&ecus[1].productDate=2018-05-22&networkInfo.cid=&networkInfo.lac=0210&networkInfo.netType=wifi&sign=2729c9e1e36dfee2f08c3487ed402dc1×tamp=1529724024
```