はじめに
Ansible には、いい感じのフォーマットの JSON に変換するためのansible.builtin.to_nice_json フィルターがあります。
日本語(おそらく非ASCII)が含まれているとデフォルトでは以下のように Unicode エスケープされます。
例
{ "name": "\u51fa\u753a\u67f3" }
ファイル出力時に不都合だったりするでエスケープされない方法を調べたら、このフィルターに ensure_ascii オプションがあって、これを無効にすると良いことが分かりました。
簡単ですが、試した結果をまとめます。
なお ansible.builtin.to_json フィルターにも ensure_ascii オプションがありますが、この記事のサンプルでは ansible.builtin.to_nice_json を利用します。
- 検証環境
- ansible-core 2.19.2
おためし
以下の Playbook でためします。
--- - name: JSON Test hosts: localhost gather_facts: false connection: local tasks: - name: Test to_nice_json ansible.builtin.copy: content: "{{ station | ansible.builtin.to_nice_json(ensure_ascii=false) }}" dest: station.json vars: station: name: 出町柳
実行すると、出力先の station.json は、以下のように日本語が普通に読める形式になります。
{ "name": "出町柳" }
なお、
content: "{{ station | to_nice_json }}"
と指定したときは、ensure_ascii がデフォルトの true なので、以下のようになります(「はじめに」に載せた通り)。
{ "name": "\u51fa\u753a\u67f3" }
おわりに
この方法がうまくいくには環境的な条件があるかもしれませんが、試す価値はあるかなと思います。