json の int 配列の中身を java 言語上の int 型で取得したい


以下のようなテストコードをかいて

[code]

    import java.io.*;
    import org.json.simple.JSONArray;
    import org.json.simple.JSONObject;
    import org.json.simple.parser.JSONParser;
    import org.json.simple.parser.ParseException;
    
    public class JsonTest {
        public static void main(String[] args) throws Exception {
            File file = new File("test.json");
            JSONParser parser = new JSONParser();
            JSONObject json = (JSONObject)parser.parse(new FileReader(file));
            JSONArray data1 = (JSONArray)json.get("data1");
            System.out.println(sum(data1));
            JSONArray data2 = (JSONArray)json.get("data2");
            System.out.println(sum(data2));
        }
    
        private static int sum(JSONArray ja) {
            int sum = 0;
            for(int i = 0; i < ja.size(); i++)
                sum += ((Integer)ja.get(i)).intValue();
            return sum;
        }
    }
    
[/code]

このようなJSONを読み込ませてみたところ

[code]

    {
        "data1": [1,2,3,4],
        "data2": [11,12,13,14]
    }
    
[/code]

以下のキャストエラーが出ます  
`Exception in thread "main" java.lang.ClassCastException: class java.lang.Long
cannot be cast to class java.lang.Integer (java.lang.Long and
java.lang.Integer are in module java.base of loader 'bootstrap')`

<https://code.google.com/archive/p/json-simple/wikis/DecodingExamples.wiki>  
こちら公式ページにデコードサンプルが載ってるんですが  
全部 System.out.print してしまっているので  
JsonArray#get した型を何にキャストすれば int になるのかよくわかりません

java で JSON を扱うのに同じ名前の JsonArray ってのがあるみたいなんですが  
たまたま最初にみたのが simple だったのでこっち使ってしまいましたが  
もう１つの JsonArray の方が使いやすいんでしょうか…




`sum +=
((Integer)ja.get(i)).intValue();`を`System.out.println(ja.get(i).getClass().getName());`に書き換えると、`java.lang.Long`が返ることが分かります。  
`ja.get(i)`からは表面上Object型が返ってきますが、中身はLong型ですので、下記の記述でキャストすれば正常に動きます。

[code]

    sum += ((Long)ja.get(i)).intValue();
    
[/code]

なお、類似質問は本家SOにもありますが、Integer型ではなくLong型が返ってくる理由は見当たりませんでした。

[JSON - simple get an Integer instead of
Long](https://stackoverflow.com/q/20869138)  
[JSON Simple: integer parsing](https://stackoverflow.com/q/29770329)




`sum +=
((Integer)ja.get(i)).intValue();`を`System.out.println(ja.get(i).getClass().getName());`に書き換えると、`java.lang.Long`が返ることが分かります。  
`ja.get(i)`からは表面上Object型が返ってきますが、中身はLong型ですので、下記の記述でキャストすれば正常に動きます。

[code]

    sum += ((Long)ja.get(i)).intValue();
    
[/code]

なお、類似質問は本家SOにもありますが、Integer型ではなくLong型が返ってくる理由は見当たりませんでした。

[JSON - simple get an Integer instead of
Long](https://stackoverflow.com/q/20869138)  
[JSON Simple: integer parsing](https://stackoverflow.com/q/29770329)

