用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”, } ] } 输出 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-01 20:03:18 浏览: 28
这个问题与上一个问题非常类似,只需要在 `json_to_url_params` 函数中稍加修改即可,代码实现如下:
```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)
params = "&".join([p for p in params.split("&") if p.startswith("ecus")])
print(params)
```
输出结果为:
```
ecus[0].ecuPartNum=ecu1&ecus[0].ecuSVer=v1&ecus[1].ecuPartNum=ecu2&ecus[1].ecuSwDid=3333&ecus[1].productDate=2018-05-22
```