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

如何在Power Query中用JSON查询CrewHu近30天动态数据?

解决Power Query中CrewHu API动态日期查询的语法错误问题

问题原因

你手动拼接字符串时,未正确处理JSON查询参数里的双引号转义规则。Power Query M语言中,字符串内部的双引号需要用两个双引号("")表示,直接插入变量会导致JSON结构的引号缺失,引发语法错误。

两种解决方案

方案1:手动拼接时正确转义引号

先定义规范的动态日期变量,再将其拼接到完整请求URL中,确保所有内部双引号都按规则转义:

let
    // 生成30天前的UTC格式日期字符串(用UtcNow避免时区偏差)
    OneMonthAgo = DateTime.ToText(Date.AddDays(DateTime.UtcNow(), -30), "yyyy-MM-ddTHH:mm:ss.fffZ"),
    // 拼接完整API请求URL,注意JSON参数内的双引号需转义为""
    ApiUrl = "https://api.crewhu.com/api/v1/survey?query={""_updated_at"":{""$gte"":""" & OneMonthAgo & """}}",
    Source = Json.Document(Web.Contents(ApiUrl, [Headers=[X_CREWHU_APITOKEN="xxxxxxxxxxx"]]))
in
    Source

说明:用DateTime.ToText直接生成目标格式字符串,比Text.Replace更简洁可靠;使用DateTime.UtcNow而非本地时间,避免时区差异导致的日期范围偏差。

方案2:用Json.FromValue生成查询参数(更推荐)

这种方法无需手动处理引号转义,由Power Query自动生成合规的JSON格式,还能自动处理URL编码:

let
    // 生成30天前的UTC日期
    OneMonthAgo = Date.AddDays(DateTime.UtcNow(), -30),
    // 构建查询条件记录,自动转为JSON文本
    QueryJson = Json.FromValue([_updated_at = [#"$gte" = OneMonthAgo]]),
    // 转成字符串并做URL编码后拼接到请求地址
    ApiUrl = "https://api.crewhu.com/api/v1/survey?query=" & Uri.EscapeDataString(Text.From(QueryJson)),
    Source = Json.Document(Web.Contents(ApiUrl, [Headers=[X_CREWHU_APITOKEN="xxxxxxxxxxx"]]))
in
    Source

说明:Uri.EscapeDataString会自动处理URL中的特殊字符,避免请求报错;用记录转JSON的方式,彻底规避手动拼接引号的失误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:25:29