ConvertFrom-Json:无效的JSON原语:

时间:2016-06-01 03:13:20

标签: json powershell azure azure-web-sites azure-storage-blobs

我试图运行一个从CMS端点获取JSON文件的脚本,将其传递给管道以转换为-json。但是,我收到一个错误,说无效的JSON原语。

  

ConvertFrom-Json:无效的JSON原语:。   在D:\ AzureProject \ SetupusingParameterfile.ps1:13 char:75

     
    
 $JsonContent = Get-Content $TemplateParameterFileLocal -Raw | Conver ...
             

CategoryInfo:NotSpecified:(:) [ConvertFrom-Json],ArgumentException          + FullyQualifiedErrorId:System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand

    
  

我的JSON参数文件的结构是内联Azure参数文件结构的内容,示例如下: -

{
"$schema": "http://schema.management.azure.com/schemas/20111-01-01/deploymentParameters.json#",
"contentVersion":"1.0.0.0",
"parameters": 
        {
            "hostingPlanName": {"value": "pilotHosting"},
            "hostingEnvironment": {"value": "pilotHostingenv"},   
            "serverFarmResourceGroup": {"value": "Pilot1H"},
            "sqlserverName": {"value": "pilotsrvrtrialrun11"},
            "administratorLogin": {"value": "sites1H"},
            "administratorLoginPassword": {"value": "abcdefg"},
            "serverName": {"value": "Pilotwebserver"},
            "databaseUsername": {"value": "pilot1Hattabc"},
            "databasePassword": {"value": "pilotdbabc1H"},
        }
}

注意:这篇文章的目的是分享Azure项目PoC期间出现的一些事情,并希望以后能够为某人服务。

2 个答案:

答案 0 :(得分:18)

方法1:-Raw 尝试将-Raw与Get-Content一起使用,以便Get-Content而不是单独读取每一行并存储为数组,从而创建对象。

 $JsonContent = Get-Content $TemplateParameterFileLocal -Raw | ConvertFrom-Json

方法2:Out-String  试图将Get-Content传送到| Out-String如下:

$JsonContent = Get-Content $TemplateParameterFileLocal | Out-String | ConvertFrom-Json

使用IDE查看JSON 最后,当我打开已保存的CMS生成的JSON副本时,我重新收集了IDE通知。它有一个预期的EOF,但是如果你注意到上面的JSON结构,它会得到一个','这导致了这个麻烦。

我再次尝试了-Raw和Out-String执行,并且按预期工作。

答案 1 :(得分:0)

您可能需要使用 IO.File 指定编码类型,例如使用 Windows-1252 加载文件:

$myObj = [IO.File]::ReadAllText($filePath, [Text.Encoding]::GetEncoding(1252)) | ConvertFrom-Json

Text.Encoding::GetEncoding Text.Encoding::GetEncodings