概要
あるソースを特定の機種で動かしたら、JSONArrayの部分がイメージしていたのと異なる結果が出た。
下記以外にも機種、OSを色々と変更して試すと、いくつか _SH-04E (4.1.2)_と同じ結果がでた。
こんなかんじの結果
SH-04E (4.1.2)の場合
{"hoge":["111111111","2222222222","3333333333"]}
{"foo":"[111111111, 2222222222, 3333333333]"}
Nexus5 (4.4.4)の場合
{"hoge":["111111111","2222222222","3333333333"]}
{"foo":["111111111", "2222222222", "3333333333"]}
なにこれ???
{"foo":"[111111111, 2222222222, 3333333333]"}
おもってたんと違う
(追記)
コメントでtnjさんに下記を教えて頂きましたー。
へー、と思って調べてみたら、 2013年5月に報告されてた バグで、その後 7月に修正されて、 android-4.4.1_r1 でリリースされてました。特定の機種ではなくてバージョンの違いで発生する問題ですね。
たしかに報告を受けた5端末のうち、成功しているのはv4.4.4dったので。
検証時に書いたサンプルはこれ
MainActivity
ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add("111111111");
arrayList.add("2222222222");
arrayList.add("3333333333");
JSONArray jsonArray = new JSONArray(arrayList);
// JSONArrayに変換してからつっこむ
HashMap<String, Object> map = new HashMap<String, Object>(1);
map.put("hoge", jsonArray);
Log.d("MainActivity", new JSONObject(map).toString());
// ArrayListに変換してからつっこむ
HashMap<String, Object> map2 = new HashMap<String, Object>(1);
map2.put("foo", arrayList);
Log.d("MainActivity", new JSONObject(map2).toString());
ArrayListをJSONArrayに変換せずにJSONObjectにしたら、
こんな結果も有りかなーとおもったけど、いくつかの機種で発生したののはナゼ???
あるある?
今までこの事例の存在を知らなかったんだけど、これってあるあるなの???
前述のとおり、どうやらバージョン依存でした。s