转换JSON文件时出现"无效的JSON原语"错误

use*_*612 14 powershell json

尝试通过PowerShell转换JSON文件时:

$json = Get-Content "C:\folder1\test.txt"

$json | ConvertFrom-Json 

write-output $json
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

无效的json原语:[.
(system.argunment.exception)

Ans*_*ers 17

因为你没有提供你的输入数据或完整的错误信息,所以我在这里走出困境,但我想你的问题是由输出Get-Content提供和输入ConvertFrom-Json预期之间的格式不匹配引起的.

Get-Content将输入文件读入字符串数组,而ConvertFrom-Json期望JSON数据在单个字符串中.另外,管道$json输入ConvertFrom-Json不会改变值$json.

将代码更改为以下内容并且错误应该消失(假设输入数据中没有语法错误):

$json = Get-Content 'C:\folder1\test.txt' | Out-String | ConvertFrom-Json

Write-Output $json
Run Code Online (Sandbox Code Playgroud)

  • Get-Content 将包含换行符,因此您需要像这样传递 -join: $json = (Get-Content 'C:\folder1\test.txt') -join "`n" | ConvertFrom-Json 或简单地传递 -Raw 开关: $json = (Get-Content 'C:\folder1\test.txt') -Raw | ConvertFrom-Json 参考:https://technet.microsoft.com/en-us/library/Hh849898.aspx#code-snippet-4 (2认同)
  • @DerekNutile `Get-Content` 生成一个字符串数组(文件中的每一行一个字符串),在将数据输入到 `ConvertFrom-Json` 之前必须将其转换为单个字符串(否则 cmdlet 将尝试转换每一行分别地)。可以通过多种方式实现转换,例如通过使用换行符连接数组,使用“-Raw”参数读取文件(仅限 PowerShell v3 和更高版本),或者首先通过“Out-String”管道输出,就像我的回答一样。 (2认同)

itr*_*jll 12

您应该检查您的JSON输入文件中是否有未使用"\"正确转义的字符

我也看到这个问题与输入JSON文件格式不正确如下:

{
    Object1
}
{
    Object2
}
Run Code Online (Sandbox Code Playgroud)

更正格式:

[{
     Object1
 },
 { 
     Object2
 }]
Run Code Online (Sandbox Code Playgroud)

一旦格式得到纠正,我就不再有问题了.

  • 似乎Powershell cmdlet ConvertFrom-JSON不喜欢JSON,它不包含数组周围的开括号和方括号[].您收到无效的Json原语错误.根据这个答案,我添加了方括号,一切都很顺利.谢谢. (2认同)