LoginSignup
10
11

More than 5 years have passed since last update.

JSON作成時に特定の機種のみでハマったこと

Last updated at Posted at 2015-01-29

概要

あるソースを特定の機種で動かしたら、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

おまけ

コードサンプルをgistに置いた

10
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11