如何在PowerShell的JSON请求体中传递变量
解决PowerShell中JSON请求体插入变量的问题
嘿,我一眼就瞅出问题所在啦!你现在用单引号包裹整个JSON字符串,PowerShell在单引号里是不会解析任何变量的,而且手动用"转义双引号不仅麻烦,还容易出错。给你两个实用的解决办法:
方法1:用双引号包裹并转义内部双引号
把外层的单引号换成双引号,同时用PowerShell的转义符(反引号)转义JSON里的双引号,这样变量就能被正常解析了。如果$userID`是字符串类型,记得给变量也加上转义的双引号,保证JSON格式合法:
$userID = "12345" # 示例用户ID $body = "{ `"data`": [ { `"user_id`":`"$userID`", `"type`":`"manual`", `"date`":`"2021-01-30`", `"duration`":`"150`", `"jobcode_id`":`"15281216`", `"notes`":`"This is a test of a manual time entry`", `"customfields`": { `"54138`" : `"IT Services`", `"54136`" : `"Yes`" } } ] }"
方法2:用PSCustomObject生成JSON(更推荐)
这是PowerShell处理JSON最规范的方式——先构建一个自定义对象来对应你的数据结构,再通过ConvertTo-Json命令转成JSON字符串。完全不用手动写JSON和处理转义,变量代入也自然流畅:
$userID = "12345" # 示例用户ID # 构建数据对象 $timeEntryData = [PSCustomObject]@{ data = @( [PSCustomObject]@{ user_id = $userID type = "manual" date = "2021-01-30" duration = "150" jobcode_id = "15281216" notes = "This is a test of a manual time entry" customfields = [PSCustomObject]@{ "54138" = "IT Services" "54136" = "Yes" } } ) } # 转成JSON字符串,-Depth要足够覆盖嵌套层级 $body = $timeEntryData | ConvertTo-Json -Depth 3
这个方法的好处是,你不用操心JSON的语法问题,PowerShell会帮你自动处理所有转义和格式,而且代码可读性高,后续修改字段也方便。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

