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

在Power BI中能否解码URL?求可行实现方案

在Power BI中解码URL编码字符串的正确方法

需要将URL编码的字符串(例如 %7b%22pageSize%22:500,%22previousIds%22:%5b3%5d,%22nextIds%22:%5b593%5d%7d&search=%7b%22filter%22:%5b%7b%22op%22:%22gte%22,%22field%22:%22id%22,%22value%22:%220%22%7d%5d%7d)转换为人类可读的JSON格式:{"pageSize":500,"previousIds":[3],"nextIds":[593]}&search={"filter":[{"op":"gte","field":"id","value":"0"}]}。


尝试过的失败方法

自定义字符替换方法(报错)

这种方法仅手动替换部分编码字符,无法覆盖所有场景,维护成本高:

// Custom function to decode a URL-encoded string
DecodeUrlEncodedString = (url as text) =>
    let
        // Replace URL-encoded characters
        decodedString = Text.Replace(url, "%7b", "{", Replacer.ReplaceText),
        decodedString1 = Text.Replace(decodedString, "%22", "\"", Replacer.ReplaceText),
        decodedString2 = Text.Replace(decodedString1, "%3a", ":", Replacer.ReplaceText),
        decodedString3 = Text.Replace(decodedString2, "%2c", ",", Replacer.ReplaceText),
        decodedString4 = Text.Replace(decodedString3, "%5b", "[", Replacer.ReplaceText),
        decodedString5 = Text.Replace(decodedString4, "%5d", "]", Replacer.ReplaceText),
        decodedString6 = Text.Replace(decodedString5, "%7d", "}", Replacer.ReplaceText)
    in
        decodedString6,

基于Uri.Parts的方案(失败)

该方法依赖完整URL结构,仅输入查询参数部分时无法解析:

= (data as text) as text =>
let 
    DecodedText = Uri.Parts("https://webservices4.autotask.net/ATServicesRest/V1.0/Projects/query/next?paging=" & data)[Query][paging]
in
    DecodedText

更新后的Uri.Parts方法(仍报错:Expression.Error: The field 'paging' of the record wasn't found)

错误原因是输入字符串不含指定分隔符,逻辑未适配查询参数结构:

converturl = (uri as text) as text => 
let
    textBeforePaging = Text.BeforeDelimiter(uri, "?paging"),
    textAfterPaging = Text.BetweenDelimiters(uri, "paging=", " "),
    out = Uri.Parts(textBeforePaging & Text.Replace(textAfterPaging , "&", "%26"))[Query][paging]
in
    out,

正确解决方法

Power Query内置的*Uri.UnescapeDataString*函数可直接解码标准URL编码字符,结合HTML实体处理即可解决问题:

自定义解码函数

DecodeUrlQuery = (encodedText as text) as text =>
    let
        // 先将HTML实体&转换为标准&,再解码整个字符串
        replaceAmp = Text.Replace(encodedText, "&", "&"),
        decoded = Uri.UnescapeDataString(replaceAmp)
    in
        decoded

使用示例

将目标编码字符串传入函数:

DecodeUrlQuery("%7b%22pageSize%22:500,%22previousIds%22:%5b3%5d,%22nextIds%22:%5b593%5d%7d&search=%7b%22filter%22:%5b%7b%22op%22:%22gte%22,%22field%22:%22id%22,%22value%22:%220%22%7d%5d%7d")

输出结果:
{"pageSize":500,"previousIds":[3],"nextIds":[593]}&search={"filter":[{"op":"gte","field":"id","value":"0"}]}

说明

  • *Uri.UnescapeDataString*自动处理所有标准URL编码字符,无需手动替换单个字符。
  • 额外处理&是因为输入中存在HTML实体编码的&,需先转换为标准符号再解码。

内容的提问来源于stack exchange,提问作者Terran Brown

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:02:45