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

Azure PowerShell中ConvertFrom-Json命令执行失败求助

解决Azure App Service Docker容器中az命令JSON转换失败问题

问题背景

本地PowerShell运行以下脚本正常,但在Azure App Service的Docker容器(Kudu SSH)中执行时,报错ConvertFrom-Json : Invalid JSON primitive: _:

$rawJsonData = az appconfig kv list --connection-string $env:APP_CONFIG_CONNECTION_STRING --fields key value
$keyValuePairs = $rawJsonData | ConvertFrom-Json

返回的JSON结构本身合法,但容器环境下解析失败,尝试过转字符串、加--output json、Get-Content -Raw等方法均无效。

可能原因

  • 容器环境中az命令输出混入了非JSON字符(比如日志前缀、控制字符),肉眼难以察觉
  • 容器内PowerShell版本(如Windows PowerShell vs PowerShell Core)对JSON解析的兼容性差异
  • 编码不匹配导致输出内容被篡改

解决方案

1. 过滤az输出,只保留JSON内容

强制az输出纯JSON,并过滤掉非JSON起始的行(比如空行、状态提示行):

$rawJsonData = az appconfig kv list --connection-string $env:APP_CONFIG_CONNECTION_STRING --fields key value --output json | Where-Object { $_ -match '^\[|^\{' }
$keyValuePairs = $rawJsonData | ConvertFrom-Json

2. 处理编码问题

容器内可能存在编码冲突,将输出转换为UTF-8字符串后再解析:

$rawOutput = az appconfig kv list --connection-string $env:APP_CONFIG_CONNECTION_STRING --fields key value --output json | Out-String
$keyValuePairs = [Text.Encoding]::UTF8.GetString([Text.Encoding]::Default.GetBytes($rawOutput)) | ConvertFrom-Json

3. 写入临时文件再读取

绕开管道传递的潜在问题,先将az输出写入文件,再读取解析:

az appconfig kv list --connection-string $env:APP_CONFIG_CONNECTION_STRING --fields key value --output json > /tmp/appconfig_temp.json
$rawJsonData = Get-Content /tmp/appconfig_temp.json -Raw
$keyValuePairs = $rawJsonData | ConvertFrom-Json
# 清理临时文件
Remove-Item /tmp/appconfig_temp.json

4. 检查并升级环境版本

容器内的PowerShell或az版本过低可能导致兼容性问题,先确认版本:

# 查看PowerShell版本
$PSVersionTable.PSVersion
# 查看az CLI版本
az --version

如果是PowerShell 5.1及以下,建议升级到PowerShell Core 7+;az CLI版本过低则执行az upgrade更新。

调试方法

如果以上方案无效,先排查输出内容是否有隐藏字符:

$rawOutput = az appconfig kv list --connection-string $env:APP_CONFIG_CONNECTION_STRING --fields key value --output json
# 输出每个字符的ASCII码,检查是否有异常字符
$rawOutput.ToCharArray() | ForEach-Object { Write-Host "$_ : $([int]$_)" }
# 输出原始内容的长度和完整文本
Write-Host "输出长度: $($rawOutput.Length)"
Write-Host "完整内容:`n$rawOutput"

通过这种方式可以定位是否有额外的下划线或其他控制字符混入输出,导致JSON解析失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 01:52:48