JSON文件中的意外字符

时间:2018-01-12 18:48:10

标签: azure azure-data-factory

问题:来自Azure DataFactory v1的JSON文件中的额外字符。

我有两个文件是来自两个Cosmos数据库集合的直接副本 我使用Data Factory v1,选择默认值,将集合复制到Blob存储容器 然后使用Azure存储资源管理器将JSON文件复制到Windows 10 桌面。

一个。使用编辑器vi / Notrepad / Wordpad / Ultra Edit / Visual查看文件 Studio Code看起来不错。

B中。当我尝试将文件读入一个简单的Nodejs(v9)应用程序时 我收到JSON解析错误:

SyntaxError: C:\Users\ricko\Desktop\whippy\MorpheusDataProduction-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:\Users\ricko\Desktop\whippy\appUpdateJSON.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 " : "
   ...

2 个答案:

答案 0 :(得分:0)

我认为这是一个编码问题。开头的两个不可打印的字符称为BOM并表示编码。智能编辑可以处理这个问题。 UltraEdit具有十六进制模式,您可以在其中以十六进制形式查看真实内容字节。 Notepad ++非常强大,可以将编码转换为您使用的几乎所有内容,包括或不包含BOM。

℃。我猜猜在收盘和开盘之间有一个逗号。

d。这里的编码似乎是unicode(修复两个字节大小的字符)。使用UltraEdit的十六进制模式验证它。

我不知道Azure,但如果您指明所需的编码,大多数编程语言都能够正确处理字节到字符的编码。当你必须将文本序列化为字节数组(通过像socket这样的行发送)时,你总是要注意这个问题,反之亦然。

答案 1 :(得分:0)

错误是由于Unicode BOM(字节顺序标记),它是文件开头的隐藏字符。

答案可以在这里找到: node.js readfile error with utf8 encoded file on windows