问题:Azure 数据工厂 v1 中的 JSON 文件中存在额外的字符。
我有两个文件,它们是来自两个 Cosmos db 集合的直接副本。
我使用数据工厂 v1 选择默认值,将集合复制到 Blob 存储容器然后使用 Azure 存储资源管理器将 JSON 文件复制到 Windows 10桌面。
A. 使用编辑器查看文件 vi/Notrepad/写字板/Ultra Edit/Visual工作室代码 他们看起来不错。
二.当我尝试将文件读入一个简单的 Nodejs(v9( 应用程序时我收到 JSON 解析错误:
SyntaxError: C:UsersrickoDesktopwhippyMorpheusDataProduction-01052018-
20.json: Unexpected token � in JSON at positi
on 0
at JSON.parse (<anonymous>)
at Object.Module._extensions..json (module.js:654:27)
at Module.load (module.js:554:32)
at tryModuleLoad (module.js:497:12)
at Function.Module._load (module.js:489:3)
at Module.require (module.js:579:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (C:UsersrickoDesktopwhippyappUpdateJSON.js:5:17)
at Module._compile (module.js:635:30)
at Object.Module._extensions..js (module.js:646:10)
三.单行使用 JSON http://jsonlint.com 进行验证。多行不验证给出解析错误:
Error: Parse error on line 15:
..."_ts": 1512601730} { "path": "Dropbox
----------------------^
Expecting 'EOF', '}', ',', ']', got '{'
D.还使用节点直接读取文件,然后写入记录 到控制台,我得到了一个奇怪的双倍行距版本。我还看到了两个在一次尝试中打开大括号前面的行首的字符。(下面的示例(
{ " S T E P _ N A M E " : " O p e n s T e s t " , " N A M E " : " A r t
h u r J o b e r t " , " D A T E " : " 1 2
1 9 / 2 0 1 6 3 : 5 7 : 4 7 P M " , " L O T " : " C G 1 5 " , " W A F
E R " : " " , " P R O C E S S _ S T E P " : "
...
我认为这是一个编码问题。开头的两个不可打印字符称为 BOM,表示编码。聪明的编辑可以处理这个问题。UltraEdit 具有十六进制模式,您可以在其中以十六进制形式查看字节的实际内容字节。Notepad++非常强大,可以将编码转换为几乎所有您将使用的内容,无论是否使用BOM。
三.我猜右括号和左括号之间缺少一个逗号。
D.这里的编码似乎是 unicode(固定两个字节大小的字符(。使用 UltraEdit 的十六进制模式进行验证。
我不了解 Azure,但如果您指示所需的编码,大多数编程语言都能够正确处理字节到字符编码。当您必须将文本序列化为字节数组(用于通过套接字等行发送(时,您始终必须注意此问题,反之亦然。
错误是由于 Unicode BOM(字节顺序标记(造成的,这是文件开头的隐藏字符。
答案可以在这里找到:节点.js Windows 上带有 UTF8 编码文件的读取文件错误