我有一个 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": [
]
}
答案 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 所在的位置。