Json の値に改行、など制御文字 '\t'、'\n'、'\r' 等、0 から 31 までの範囲のコードを
読む時に、
そのまま通常の読み方をすると、
json.decoder.JSONDecodeError: Invalid control character
になってしまう。
これを回避するには、json.load を、strict=False で実行する。
例)
with codecs.open('sample.json', 'r', 'utf-8') as f: dict = json.load(f, strict=False)
そもそも、値に改行文字、制御文字コードが入る JSON 規約違反ではなかったか?
ちょっと認識が曖昧です。
JavaScript では、
JSON.parse は、Syntax error になる。
Java の Jackson でも、
Illegal unquoted character ((CTRL-CHAR, code 9)): has to be escaped
しかし!
Java の Google gson の fromJson では、
エラーにならず、そのまま読込むことが可能だった。
Gson gson = new GsonBuilder().create(); Map<String, Object> map = gson.fromJson(jsonstr, new TypeToken<Map<String, Object>>(){}.getType());
これで読んで、改行がある値も、Map の Object に、String として
そのまま読んでくれた。