Twig の json_encode フィルタをより有効活用するための Tips をご紹介します。
Craft CMS に限った話ではないですが、Twig の json_encode
フィルタに関する Tips をご紹介します。Tips と言っても、ただオプションを渡せるよという話ですし、ドキュメントにも書いてありますが、意外と知らない人もいるかなと思いまして。。。
例えば data
という変数があったとすると、その data
を JSON に変換して出力するときは {{ data|json_encode }}
とすればOKですね。
{% set data = {'foo': 'こんにちは。', 'bar': 'さようなら。'} %}
{{ data|json_encode }}
出力結果 ---
{"foo":"\u3053\u3093\u306b\u3061\u306f\u3002","bar":"\u3055\u3088\u3046\u306a\u3089\u3002"}
しかし、この data
が日本語などのマルチバイト文字を含んだ配列やオブジェクトだったりすると、上記のようにマルチバイト文字はエンコードされて出力されてしまいます。場合によってはエンコードされないで読める形で出力してほしい場合があります。
そういったときは json_encode
フィルタに下記のようにしてオプションを渡します。
{% set data = {'foo': 'こんにちは。', 'bar': 'さようなら。'} %}
{{ data|json_encode(constant('JSON_UNESCAPED_UNICODE') }}
出力結果 ---
{"foo":"こんにちは。","bar":"さようなら。"}
まだダブルクオーテーションがエンコードされているので raw
フィルタを追加します。
{% set data = {'foo': 'こんにちは。', 'bar': 'さようなら。'} %}
{{ data|json_encode(constant('JSON_UNESCAPED_UNICODE'))|raw }}
出力結果 ---
{"foo":"こんにちは。","bar":"さようなら。"}
もうちょっと見た目を整えたい場合は JSON_PRETTY_PRINT オプションを渡します。複数のオプションを渡すときは b-or
演算子を利用します。
{% set data = {'foo': 'こんにちは。', 'bar': 'さようなら。'} %}
{{ data|json_encode(constant('JSON_UNESCAPED_UNICODE') b-or constant('JSON_PRETTY_PRINT'))|raw }}
出力結果 ---
{
"foo": "こんにちは。",
"bar": "さようなら。"
}
オプションで渡せるものは下記のドキュメントを参照してください。