You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将URL编码转换为JSON?JS解码报URI Malformed错误解决

问题说明
  • 待处理的URL编码位置数据:
    %7B%22distance%22%3A1000000%2C%22country%22%3A%22BR%22%2C%22city%22%3A%22S%E3o%20Paulo%22%2C% 22latitude%22%3A-23.6283%2C%22longitude%22%3A-46.6409%2C%22region_code%22%3A%22SP%22%7D
  • 目标:将上述编码内容转换为标准JSON
  • 故障表现:调用JavaScript解码函数时抛出URI Malformed(URI格式畸形)错误,无法完成转换,报错截图如下:
    URI格式畸形报错截图
故障根因

编码字符串存在两处不符合URL编码规范的问题,直接触发解码报错:

  • 编码串中% 22片段的百分号和十六进制字符之间插入了多余半角空格,标准URL编码要求%后必须直接紧跟两位十六进制转义字符,空格会打断转义序列结构
  • 城市名São Paulo中的字符ã使用了残缺编码:UTF-8编码下ã对应的正确URL编码为%C3%A3,原编码仅写了单字节%E3,属于不完整的多字节字符转义序列
修复步骤
  1. 预处理原始编码串:移除所有打断转义序列的非法空格,补全残缺的字符编码,修复后的合法编码串如下:
    %7B%22distance%22%3A1000000%2C%22country%22%3A%22BR%22%2C%22city%22%3A%22S%C3%A3o%20Paulo%22%2C%22latitude%22%3A-23.6283%2C%22longitude%22%3A-46.6409%2C%22region_code%22%3A%22SP%22%7D

  2. 执行解码与JSON解析,参考JavaScript代码:

// 修复后的编码字符串
const encodedLocation = "%7B%22distance%22%3A1000000%2C%22country%22%3A%22BR%22%2C%22city%22%3A%22S%C3%A3o%20Paulo%22%2C%22latitude%22%3A-23.6283%2C%22longitude%22%3A-46.6409%2C%22region_code%22%3A%22SP%22%7D";
// 解码+转JSON
const locationData = JSON.parse(decodeURIComponent(encodedLocation));
console.log(locationData);
  1. 最终解析得到的标准JSON结果:
{
  "distance": 1000000,
  "country": "BR",
  "city": "São Paulo",
  "latitude": -23.6283,
  "longitude": -46.6409,
  "region_code": "SP"
}

排查提示:后续遇到同类URI Malformed报错,优先检查两个方向:一是编码串中是否存在空格、特殊符号打断%开头的转义序列;二是是否存在残缺的多字节字符编码。

内容的提问来源于stack exchange,提问作者Jorge Barros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 09:45:37