90998


[json の int 配列の中身を java 言語上の int
型で取得したい](https://ja.stackoverflow.com/questions/90993/json-%e3%81%ae-
int-%e9%85%8d%e5%88%97%e3%81%ae%e4%b8%ad%e8%ba%ab%e3%82%92-java-%e8%a8%80%e8%aa%9e%e4%b8%8a%e3%81%ae-
int-%e5%9e%8b%e3%81%a7%e5%8f%96%e5%be%97%e3%81%97%e3%81%9f%e3%81%84)  
こちらで先程似た質問をしたんですが少数が含まれるケースをどう読めばいいかわからず困っています

少数がついていないのは Long になってしまって、  
少数がついたものは Double になってしまうみたいなんですが、  
キャストする前は Object 型でどちらの方に型にキャストできるか知る方法がありません  
何かいい方法は有りませんか？

こちらがテストコードです

[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 data = (JSONArray)json.get("data");
            System.out.println(sum(data));
        }
    
        private static double sum(JSONArray ja) {
            double sum = 0;
            for(int i = 0; i < ja.size(); i++)
                sum += ((Double)ja.get(i)).doubleValue();
            return sum;
        }
    }
    
[/code]

以下のような少数混じりの JSON 配列を最終的に java 上に double で取得したいです

[code]

    {
        "data": [1,1.5,2,2.5]
    }
    
[/code]


CC BY-SA 4.0
2022-09-08T08:51:18.863
90996
2022-09-08T09:09:35.657
question
java
json の少数整数混じりの配列の中身を java 言語上の double 型で取得したい


どういう入力が想定され、そこからどういう結果を得たいのかにもよりますが、差し当たって質問文中の入力を処理できるようにするには、 [`Number`
型](https://docs.oracle.com/javase/jp/17/docs/api/java.base/java/lang/Number.html)
として扱えばよいです。

[code]

        private static double sum(JSONArray ja) {
            double sum = 0;
            for(int i = 0; i < ja.size(); i++)
                sum += ((Number)ja.get(i)).doubleValue();
            return sum;
        }
    
[/code]

利用されている JSON parser の実装を見ると、数値は [`Long`](https://github.com/fangyidong/json-
simple/blob/master/src/main/java/org/json/simple/parser/Yylex.java#L660) か
[`Double`](https://github.com/fangyidong/json-
simple/blob/master/src/main/java/org/json/simple/parser/Yylex.java#L606)
として扱われています。  
`Number` はそれらに共通するスーパークラスです。


CC BY-SA 4.0
2022-09-08T09:09:35.657
90998
2022-09-08T09:09:35.657
2808
90996
answer