最終的にファイルに保存する必要があるJSON構造を作成していますが、埋め込み改行文字に問題があります。改行文字を含む文字列を含むdictからJSONドキュメントを作成できません
私が最初に辞書を作成します。
changes = {
"20161101": "Added logging",
"20161027": "Fixed scrolling bug",
"20161024": "Added summary functionality"
}
して、単一改行区切りの文字列に変換します、これまでのところ
changes_str = '\n'.join([ "{0} - {1}".format(x, y) for x, y in changes.items() ])
print changes_str
'20161101 - Added logging\n20161027 - Fixed scrolling bug\n20161024 - Added summary functionality'
とても良いです。
changes_str_json_str = '{ "version": 1.1, "changes": "' + changes_str + '" }'
print changes_str_json_str
'{ "version": 1.1, "changes": 20161101 - Added logging\n20161027 - Fixed scrolling bug\n20161024 - Added summary functionality }'
が、私は、この使用して負荷からJSONオブジェクトをエンコード/作成するために来るとき、私は問題を打つ:今私は(実際にテキストテンプレートから来ることになる)文字列にそれを追加
json_obj = json.loads(changes_str_json_str)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/python2.7/json/__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "/opt/python2.7/json/decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/opt/python2.7/json/decoder.py", line 380, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Invalid control character at: line 1 column 55 (char 54)
改行を別の文字に変更すると、問題がどこにあるのかがはっきりとわかりますが、最終的にファイルのデータをこのようにフォーマットする必要があるため、文字を改行する必要があります(ファイルは私が知る限り、改行はJSON文字列でサポートされている文字です。
ここで問題となるものは何ですか?どうすれば回避できますか?辞書のpythonで文字列JSONをロードするには
import json
changes_str = json.dumps(changes)
:シングル改行区切りの文字列に変換し
これは実際には問題にはなりません。たとえば、 'dict_changes = json.loads( '{" message ":" hello \ nworld "}')'を実行すると、 '無効な制御文字 'エラーが発生します。 http://www.json.org/は、 '\ n'が文字列内にある有効な文字であることを示します。 –
JSONページを再読みするには、実際には '\ n 'の後ろに' n n'が付いていることがわかります。これはおそらく私の質問の根源です。 –