You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Power Query中从含多引号长字符串提取"s":"b"子串

提取JSON字符串中特定键值对到Power Query新列的方法

没问题,我来帮你搞定这个Power Query里的文本提取需求!你提到的转义问题确实是M语言里的关键点,我会用纯文本函数给你两种解决方案,对应不同的提取目标:

1. 提取s键对应的纯值(比如b

如果你的目标是获取s键的值而非完整的键值对片段,用Text.BetweenDelimiters是最简洁的方式。记住在M语言里,双引号需要用两个双引号转义,所以我们要把目标分隔符正确转义:

添加自定义列时使用这个公式(替换[JSON_Text]为你的实际列名):

Text.Trim(Text.BetweenDelimiters([JSON_Text], """s"":""""", """,""""), """")

公式解释:

  • """s"":""""":转义后对应字符串 "s":",作为提取的起始标记
  • """,""":转义后对应字符串 ",,作为提取的结束标记
  • Text.Trim(..., """"):自动去掉结果两端的双引号,直接得到纯值b

要是你需要保留值的双引号(比如得到"b"),去掉外层的Text.Trim就行:

Text.BetweenDelimiters([JSON_Text], """s"":""""", ""","""")

2. 提取完整的"s":"b"键值对片段

如果必须提取整个"s":"b"字符串,我们可以结合Text.PositionOf定位位置,再用Text.Range截取内容:

let
    StartPos = Text.PositionOf([JSON_Text], """s"":"""""),
    EndPos = if StartPos <> -1 then Text.PositionOf([JSON_Text], """", StartPos + 6) else -1,
    Extracted = if StartPos <> -1 then Text.Range([JSON_Text], StartPos, EndPos - StartPos + 1) else null
in
    Extracted

公式解释:

  • 先检查s键是否存在(StartPos <> -1),避免找不到内容时报错
  • 定位起始位置后,从"s":"的末尾开始找下一个双引号,确定结束位置
  • 最后用Text.Range截取从起始到结束的完整片段,得到"s":"b"

快速操作步骤

  • 打开Power Query编辑器,选中你的JSON文本列
  • 点击顶部菜单栏的添加列自定义列
  • 把上面的公式粘贴进去,替换[JSON_Text]为你的列名
  • 点击确定,新列就会显示你要的内容啦!

内容的提问来源于stack exchange,提问作者Marko Jelic

火山引擎 最新活动