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);

のようにしてアクセスできる。