JSON.parse(): SyntaxError: Unexpected token � in JSON at position 0

时间:2021-07-23 11:45:25

标签: javascript json powershell jsonparser

我有一个 json 对象,它从以下 PowerShell 命令返回:

Get-Service -Name "name" | ConvertTo-Json -Compress > "/to/path/name.json"

如果我基本上在 vscode 中打开文件,它似乎格式正确。 在我用

读取文件后

fs.readFile(file, 'utf8', (err, data)...

然后尝试 JSON.parse(data) 我收到错误:

undefined:1
��{
^

SyntaxError: Unexpected token � in JSON at position 0

然后我尝试执行以下操作: data.replace(/[^\x00-\x7F]/g, "") 只有 ASCII 字符,这基本上似乎至少可以与 console.log() 一起使用。

但是 JSON.parse 然后抱怨:

undefined:1
{
 

SyntaxError: Unexpected token  in JSON at position 1

我不确定那里有什么问题。希望有人能帮助我。

这是一个示例 json 文件:因为我认为格式是正确的。 -Compress PowerShell 参数删除的空格太多。

{
    "CanPauseAndContinue":  false,
    "CanShutdown":  false,
    "CanStop":  false,
    "DisplayName":  "OpenSSH Authentication Agent",
    "DependentServices":  [

                          ],
    "MachineName":  ".",
    "ServiceName":  "ssh-agent",
    "ServicesDependedOn":  [

                           ],
    "ServiceHandle":  {
                          "IsInvalid":  false,
                          "IsClosed":  false
                      },
    "Status":  1,
    "ServiceType":  16,
    "StartType":  4,
    "Site":  null,
    "Container":  null,
    "Name":  "ssh-agent",
    "RequiredServices":  [

                         ]
}

3 个答案:

答案 0 :(得分:2)

您的 JSON 文件似乎具有不同的编码,可能是 utf16le 而不是 utf8。

我复制了您的场景并在此处找到了帮助: Strange unicode characters when reading in file in node.js app

fs.readFile(file, 'utf16le', (err, data)...

答案 1 :(得分:0)

我认为由于换行符和制表符而出现问题。我试图解析你的代码,它被成功解析。请尝试使您的 JSON 数据成为一行。像这里:How to remove all line breaks from a string

答案 2 :(得分:0)

也许这与您编写使用 session 对象的 PHP 脚本时的问题相同。

在 PHP 中,当文件使用带有 BOM 的 UTF8 编码时,使用 session 的 PHP 脚本完全中断。为了解决这个问题,我一般在 Notepad++ 中打开文件,转到 Format -> UTF8 (without BOM),然后再次保存。总是为我工作。这可能是您的情况,因为这些损坏的字符似乎位于文件的开头,这正是 BOM 所在的位置。

This answer might clarify about UTF8 and BOM.