string.xmlにJSONを埋め込む
Androidアプリケーションのプロトタイプなんかを作っていたりすると、JSONをハードコーディングしたくなるときがある。
プロトタイプでいちいちサーバ立てて通信させてとかやりたくない。 かといって .java に + でつないで何行も書くのは精神衛生上よろしくない。 そこで、 string.xml に書いてみる。
失敗例
<string name="json_test_data">{ "spam": "ham < egg" }</string>
しかしこれは失敗する。
XML なので <
はエスケープされてしまう。
CDATA で囲ってみるのはどうだろう。
<string name="json_test_data"><![CDATA[{ "spam": "ham < egg" }]]></string>
これもまずい。
http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling にあるように、"
や'
はエスケープされてしまう。
成功例
<![CDATA["
と "]]></string>
で囲んでJSONのStringは '
で囲む。
<string name="json_test_data"><![CDATA["{ 'spam': 'ham < egg' }"]]></string>
※RFCの定義上、Stringは "
で囲まなくてはいけないが、 org.json
がうまく動いてくれるのでこれでOKにしとく
単体テストで使う
プロトタイプの検証用データとして使えるが、単体テストのテストデータにも使える。
テストケースを AndroidTestCase
で作れば、
getContext().getResources().getStringArray(R.string.json_test_data);
のようにしてアクセスできる。