如何将XML中含%3D、%26的URL参数转换为JSON?
问题翻译
我有如下XML字符串:
<xml><row ID="61" url="Page.aspx%3fstepid%3dMyStepID%26ID%3d65454%26UserID%3d2542240%26process%3dMyProcess"></row></xml>
我需要仅提取该字符串中URL部分的参数,将其转换为JSON模型。示例如下:
StepID:MyStepID ID:65454 UserID:2542240 Process:MyProcess
我注意到字符串中键与值用%3D分隔,各参数间用%26分隔,请问该如何将其转换为JSON?
解决方法
核心思路
先从XML里抠出URL编码的字符串,解码还原成正常的查询参数格式,再拆分键值对,最后转成JSON。
步骤+代码示例(Python)
import xml.etree.ElementTree as ET import urllib.parse import json # 原始XML字符串 xml_str = '<xml><row ID="61" url="Page.aspx%3fstepid%3dMyStepID%26ID%3d65454%26UserID%3d2542240%26process%3dMyProcess"></row></xml>' # 1. 从XML里提取url属性 root = ET.fromstring(xml_str) url_encoded = root.find('row').get('url') # 2. 解码URL编码(%3D转=,%26转&,%3F转?) url_decoded = urllib.parse.unquote(url_encoded) # 3. 拆分参数,整理成键值对 query_part = url_decoded.split('?')[1] # 只取?后面的参数部分 params = {} # 自定义键名映射,匹配示例里的大小写 key_map = { 'stepid': 'StepID', 'id': 'ID', 'userid': 'UserID', 'process': 'Process' } for param in query_part.split('&'): key, value = param.split('=') params[key_map[key.lower()]] = value # 4. 转成JSON json_result = json.dumps(params, indent=2) print(json_result)
输出结果
{ "StepID": "MyStepID", "ID": "65454", "UserID": "2542240", "Process": "MyProcess" }
JavaScript版本参考
如果用前端JS处理,逻辑完全一致:
const xmlStr = '<xml><row ID="61" url="Page.aspx%3fstepid%3dMyStepID%26ID%3d65454%26UserID%3d2542240%26process%3dMyProcess"></row></xml>'; // 解析XML拿url属性 const xmlDoc = new DOMParser().parseFromString(xmlStr, "text/xml"); const urlEncoded = xmlDoc.querySelector('row').getAttribute('url'); // 解码 const urlDecoded = decodeURIComponent(urlEncoded); // 拆分参数 const queryPart = urlDecoded.split('?')[1]; const params = {}; const keyMap = { 'stepid': 'StepID', 'id': 'ID', 'userid': 'UserID', 'process': 'Process' }; queryPart.split('&').forEach(param => { const [key, value] = param.split('='); params[keyMap[key.toLowerCase()]] = value; }); // 转JSON const jsonResult = JSON.stringify(params, null, 2); console.log(jsonResult);
内容的提问来源于stack exchange,提问作者tRuEsAtM
相关产品推荐
相关产品推荐

