1

「BOMなしのutf-8」でエンコードされたファイルに、この非常に短いJSONコードがあります。

{ "paths": ["A:\\path\\to\\dir"],
  "anotherPath": "os.path.join(os.path.dirname( __file__ ), '..')"
}

さまざまなオンライン JSON バリデーターでその有効性を確認しました。しかし、次のPythonコードでは...

jsonfile = "working\\path\\to\\myProgram.conf"
with open(jsonfile) as conf:
    confContent = json.load(conf)
# doStuff...

... 次のエラーが表示されます。

No JSON object could be decoded

別の場所でコンテンツを正常に読み取ったため、パスが正しいことはわかっています。何が間違っている可能性がありますか?

4

1 に答える 1

3

問題は、実際には BOM なしで UTF-8 としてエンコードされたファイルがないことです。

次のように、その文字列をそのようにエンコードしたファイルを生成できます。

u='''{ "paths": ["A:\\path\\to\\dir"],
  "anotherPath": "os.path.join(os.path.dirname( __file__ ), '..')"
}'''
s=u.encode('utf-8')
with open('test.json', 'wb') as f:
    f.write(s)

('b'が必要かどうかは、Python 2 か 3 か、Windows か Unix かによって異なります。ただし、必要がなければ問題はありません。)

ここで、そのファイルに対してコードを実行すると、機能します。

ただし、test.jsonファイルを自分のworking\\path\\to\\myProgram.confファイルと比較して、違いを確認できます。(ほとんどの Windows 以外のシステムには、 のようなコマンド ライン ツールが付属していhexdumpます。Windows では、違いを見つけるために、少し手の込んだ作業が必要になる場合があります。)

于 2013-02-07T19:57:50.350 に答える