Dieser Artikel stellt vor, wie Probleme behandelt und gelöst werden, bei denen JSON-Dateien nicht geladen oder geparst werden können, aber aus irgendeinem Grund funktioniert das Verschönern in Atom.
Ich verwende regelmäßig eine Übersetzungssoftware namens qtranslate, die ziemlich ausgezeichnet ist… aber lassen Sie uns hier nicht darauf eingehen. Sie speichert den Übersetzungsverlauf im JSON-Format, den ich nutze, aber es gab eine rätselhafte Sache - vor dem Parsen von JSON in Bash oder Ruby musste ich es in Atom öffnen und json beautify durchführen.
Und die Ursache - das ist schwer zu bemerken. Es war die BOM. Schon ein Jahr her, dass ich dich gesehen habe. Zuvor wurde ich damit mit autohotkey geplagt.
Der Grund, warum das Verschönern in Atom es behebt, scheint zu sein, dass es die BOM automatisch entfernt. Das Folgende zeigt die Bestätigung, ob BOM vor und nach dem Verschönern in Atom angehängt ist.
yuis ASUS /mnt/c/pg$ file /mnt/e/_QTranslate/History.json
/mnt/e/_QTranslate/History.json: UTF-8 Unicode (with BOM) text, with very long lines, with no line terminators
yuis ASUS /mnt/c/pg$ file /mnt/e/_QTranslate/History.json
/mnt/e/_QTranslate/History.json: UTF-8 Unicode text, with very long lines
Damit, Was so war,
yuis ASUS /mnt/c/pg$ cat /mnt/e/_QTranslate/History.json | parsejson '[0]'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python3.5/json/__init__.py", line 268, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "/usr/lib/python3.5/json/__init__.py", line 315, in loads
s, 0)
json.decoder.JSONDecodeError: Unexpected UTF-8 BOM (decode using utf-8-sig): line 1 column 1 (char 0)
Kann jetzt geparst werden.
yuis ASUS /mnt/c/pg$ cat /mnt/e/_QTranslate/History.json | parsejson '[0]'
['evading', [[5, 17, 33, '回避\r\n\r\nVerbs:\r\n 回避 (avoid, around, avoidance, circumvent, evade, avert, evasion, evading)\r\n 脱税 (tax evasion, evaded, evading, evaders, evasions)\r
\n 逃れ (dodging, fled, evaded, fleeing, shirking, evading)\r\n\r\n']], False]
Sobald Sie das wissen, ist der Rest einfach. Lassen Sie uns es programmatisch mit bash nkf lösen.
nkf --overwrite --oc=UTF-8-BOM hoge.txt # BOM hinzufügen
nkf --overwrite --oc=UTF-8 hoge.txt # BOM entfernen
yuis ASUS /mnt/c/pg$ file /mnt/e/_QTranslate/History.json
/mnt/e/_QTranslate/History.json: UTF-8 Unicode (with BOM) text, with very long lines, with no line terminators
yuis ASUS /mnt/c/pg$ nkf --overwrite --oc=UTF-8 /mnt/e/_QTranslate/History.json
yuis ASUS /mnt/c/pg$ file /mnt/e/_QTranslate/History.json
/mnt/e/_QTranslate/History.json: UTF-8 Unicode text, with very long lines, with no line terminators
Schön.
