ConvertFrom-Json:无效的 JSON 原语:
ConvertFrom-Json : Invalid JSON primitive:
我正在尝试 运行 从 CMS 端点获取 JSON 文件的脚本,将其通过管道传递给 convertfrom-json。但是,我收到一条错误消息,提示 Invalid JSON primitive。
ConvertFrom-Json : Invalid JSON primitive: .
At 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"},
}
}
注意:post的目的是分享 Azure 项目 PoC 过程中出现的一些事情,希望以后能为大家服务。
方法 1:-Raw
尝试将 -Raw 与 Get-Content 一起使用,以便 Get-Content 不是单独读取每一行并存储为数组,而是创建对象。
$JsonContent = Get-Content $TemplateParameterFileLocal -Raw | ConvertFrom-Json
方法 2:Out-String
尝试通过管道将 Get-Content 传送到 |外串如下:
$JsonContent = Get-Content $TemplateParameterFileLocal | Out-String | ConvertFrom-Json
用IDE评论JSON
最后,我想起了打开生成的 JSON 保存的 CMS 副本时的 IDE 通知。它有一个预期的 EOF,但如果你注意到上面的 JSON 结构,它有一个 ',' 导致了这个问题。
我再次尝试了 -Raw 和 Out-String 执行,它按预期工作。
您可能需要使用 IO.File 指定编码类型,例如使用 Windows-1252:
加载文件
$myObj = [IO.File]::ReadAllText($filePath, [Text.Encoding]::GetEncoding(1252)) | ConvertFrom-Json
如果您的 json 包含尾随逗号,则旧版本的 PowerShell (5.1) 也可能会出现此问题。
PowerShell 5.1: ❌
PowerShell 核心 7.1.3:✔
{
"Key": "Value",
}
5.1 中的错误:
ConvertFrom-Json : Invalid JSON primitive: .
PowerShell 5.1:✔
{
"Key": "Value"
}
我正在尝试 运行 从 CMS 端点获取 JSON 文件的脚本,将其通过管道传递给 convertfrom-json。但是,我收到一条错误消息,提示 Invalid JSON primitive。
ConvertFrom-Json : Invalid JSON primitive: . At 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"},
}
}
注意:post的目的是分享 Azure 项目 PoC 过程中出现的一些事情,希望以后能为大家服务。
方法 1:-Raw 尝试将 -Raw 与 Get-Content 一起使用,以便 Get-Content 不是单独读取每一行并存储为数组,而是创建对象。
$JsonContent = Get-Content $TemplateParameterFileLocal -Raw | ConvertFrom-Json
方法 2:Out-String 尝试通过管道将 Get-Content 传送到 |外串如下:
$JsonContent = Get-Content $TemplateParameterFileLocal | Out-String | ConvertFrom-Json
用IDE评论JSON 最后,我想起了打开生成的 JSON 保存的 CMS 副本时的 IDE 通知。它有一个预期的 EOF,但如果你注意到上面的 JSON 结构,它有一个 ',' 导致了这个问题。
我再次尝试了 -Raw 和 Out-String 执行,它按预期工作。
您可能需要使用 IO.File 指定编码类型,例如使用 Windows-1252:
加载文件$myObj = [IO.File]::ReadAllText($filePath, [Text.Encoding]::GetEncoding(1252)) | ConvertFrom-Json
如果您的 json 包含尾随逗号,则旧版本的 PowerShell (5.1) 也可能会出现此问题。
PowerShell 5.1: ❌
PowerShell 核心 7.1.3:✔
{
"Key": "Value",
}
5.1 中的错误:
ConvertFrom-Json : Invalid JSON primitive: .
PowerShell 5.1:✔
{
"Key": "Value"
}