93111


electron(v22)+Vue(v3)を使って、JSONで処理しようとしています。

アップロードしたファイルをテキストファイルをJSONにパースしようとするとエラーが発生します。  
もしかしたら改行コードやスペースが原因かと思い、最小構成のJSONを作ってみました。  
しかし、それでもエラーが発生します。

[code]

    const text = fs.readFileSync(filePath, 'utf-8');
    const json = JSON.parse(text);
    
[/code]

テストしたテキストファイルは次のようなものです。改行コードもありません

[code]

    {"test":"text"}
    
[/code]

発生するエラーは次のとおりです。

[code]

    SyntaxError: Unexpected token '', "{"test":"text"}" is not valid JSON
    
[/code]

toStringを付けてみましたが同じでした。

[code]

    JSON.parse(text.toString())
    SyntaxError: Unexpected token '', "{"test":"text"}" is not valid JSON
    
[/code]

直接、テキスト文を書き込むと問題ありません

[code]

    JSON.parse('{"test":"test"}')
    > Object {test: "test"}
    
[/code]

エラーが発生してしまう原因がわかりません。  
何が原因と考えられるでしょうか？

よろしくお願いします。

【追記】  
デバッグコンソールでいろいろとテストをしてみました。

  1. JSON.parse(text) で エラー
  2. text の中は '{"test":"text"}'
  3. '{"test":"text"}'を手打ちでJSON.parse だと正常
  4. text と 手打ち '{"test":"text"}' を比較すると false

見た目は一緒だけど、中身が違うと認識されているようです。  
文字コードはUTF-8、そもそも記号とアルファベットだけなので文字コードも影響がないはずでは？

typeof(text) を実行してみると string が返ってきました。

うーーん、本当何が原因なんでしょう

[![画像の説明をここに入力](https://i.stack.imgur.com/tbO4Q.png)](https://i.stack.imgur.com/tbO4Q.png)


CC BY-SA 4.0
2022-12-30T09:09:58.127
93109
2023-02-12T03:37:31.107
2023-02-12T03:37:31.107
7980
7980
question
javascript json
形式として問題ないのに JSON.parse で エラーになってしまう


対象ファイルが「BOM付きUTF-8」でした。  
先頭の１文字に U+FEFF がついており、そのためにJSON.parseがエラーになる原因でした。  
"幅ゼロの文字" のため、テキストベースでは気づけませんでした。

下記のコードで削除することで問題なくJSON化出来ました。

[code]

    let text = await fs.readFileSync(filePath, 'utf8');
    if (text.charCodeAt(0) === 0xFEFF) {
        text = text.substring(1);
    }
    const json = JSON.parse(text);
    
[/code]

（コメントでご指摘頂いた内容です。解決しましたので回答として投稿いたします）


CC BY-SA 4.0
2022-12-30T12:52:18.930
93111
2023-01-01T00:48:10.060
2023-01-01T00:48:10.060
7980
7980
93109
answer