Excel 365中Power Query的M语言如何将命名单元格变量嵌入POST请求的JSON内容
Excel 365中Power Query的M语言如何将命名单元格变量嵌入POST请求的JSON内容
你好!我明白你现在的困扰——已经成功从命名单元格拿到了ApiKey变量,但就是没法把它正确嵌入到POST请求的JSON内容里。其实你之前的思路有对的地方,只是可能卡在了字符串转义或者更高效的写法上,我给你两种解决方案:
方案一:修正字符串拼接的写法
你之前尝试的字符串拼接思路是对的,只是要确保引号转义和变量拼接的格式完全正确。在M语言里,两个双引号代表一个实际的双引号,所以要把变量ApiKey用三个双引号包裹在前后(也就是""" & 变量 & """),这样就能生成带引号的变量值了。
修正后的myContent代码如下:
myContent = "{ ""key"": """ & ApiKey & """, ""datarequest"": ""all"" }",
方案二:更推荐的Record转JSON写法
手动拼接JSON字符串很容易因为转义出错,更稳妥的方式是直接用M语言的Record构造JSON结构,再通过Json.FromValue转换成JSON格式。这种写法更清晰,也不用纠结引号转义的问题:
替换原来的myContent和myData部分,直接用下面的代码:
myData = [ key = ApiKey, datarequest = "all" ],
这样myData本身就是一个符合JSON结构的Record,后面直接传给Uri.BuildQueryString就可以了,连Json.Document都不需要额外调用,代码更简洁。
完整的修正代码(用方案二的写法)
let ApiKey = Excel.CurrentWorkbook(){[Name="ApiKey"]}[Content]{0}[Column1], BaseURL = "https://www.example.com/api", myData = [ key = ApiKey, datarequest = "all" ], Source = Json.Document( Web.Contents( BaseURL, [ Headers=[#"Content-Type" = "application/x-www-form-urlencoded"], Content=Text.ToBinary(Uri.BuildQueryString(myData)) ] ) ) in Source
另外要说明的是,你尝试的""@ApiKey""写法是无效的——M语言里@是用来转义关键字的(比如当变量名和M语言关键字重名时),并不是用来引用变量的语法,所以这种写法只会把@ApiKey当作普通字符串处理。
备注:内容来源于stack exchange,提问作者techtheatre
相关产品推荐
相关产品推荐

