JSON.parse(): SyntaxError: Unexpected token � in JSON at position 0
JSON.parse(): SyntaxError: Unexpected token � in JSON at position 0
我有一个 json 对象,它 returns 来自以下 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": [
]
}
我认为出现了换行符和制表符问题。我尝试解析您的代码,并且解析成功。请尽量使您的 JSON 数据成为一行。喜欢这里:How to remove all line breaks from a string.
您的 JSON 文件似乎有不同的编码,可能是 utf16le 而不是 utf8。
我复制了你的场景并在这里找到了帮助:
Strange unicode characters when reading in file in node.js app
fs.readFile(file, 'utf16le', (err, data)...
这可能与您编写使用 session
对象的 PHP 脚本时的问题相同。
在PHP中,当一个文件使用带BOM的UTF8编码时,使用session
的PHP脚本完全崩溃。为了解决这个问题,我通常在 Notepad++ 中打开文件,转到格式 -> UTF8(无 BOM),然后再次保存。总是为我工作。这可能是你的情况,因为这些损坏的字符似乎在你的文件的开头,这正是 BOM 所在的位置。
This answer might clarify about UTF8 and BOM.
通常错误消息中包含一些奇怪的字符(如 �)会提示编码可能存在问题。
一些 nodejs readFile
api 具有不同的编码
fs.readFile(file, 'utf8', function(err, data) { ... });
fs.readFile(file, 'utf16le', function(err, data) { ... }); // le - little endian
fs.readFile(file, 'ucs2', function(err, data) { ... }); // kind of 'utf16le'
我有一个 json 对象,它 returns 来自以下 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": [
]
}
我认为出现了换行符和制表符问题。我尝试解析您的代码,并且解析成功。请尽量使您的 JSON 数据成为一行。喜欢这里:How to remove all line breaks from a string.
您的 JSON 文件似乎有不同的编码,可能是 utf16le 而不是 utf8。
我复制了你的场景并在这里找到了帮助: Strange unicode characters when reading in file in node.js app
fs.readFile(file, 'utf16le', (err, data)...
这可能与您编写使用 session
对象的 PHP 脚本时的问题相同。
在PHP中,当一个文件使用带BOM的UTF8编码时,使用session
的PHP脚本完全崩溃。为了解决这个问题,我通常在 Notepad++ 中打开文件,转到格式 -> UTF8(无 BOM),然后再次保存。总是为我工作。这可能是你的情况,因为这些损坏的字符似乎在你的文件的开头,这正是 BOM 所在的位置。
This answer might clarify about UTF8 and BOM.
通常错误消息中包含一些奇怪的字符(如 �)会提示编码可能存在问题。
一些 nodejs readFile
api 具有不同的编码
fs.readFile(file, 'utf8', function(err, data) { ... });
fs.readFile(file, 'utf16le', function(err, data) { ... }); // le - little endian
fs.readFile(file, 'ucs2', function(err, data) { ... }); // kind of 'utf16le'