如何从JSONObject检查值的json日期类型?

时间:2016-07-15 13:51:17

标签: java json datetime odata

我有一个混合数据类型值的jsonObject。我想认识他们的课程,以便我可以进一步处理。

但是,当他们的班级为 Json日期类型时,我无法检查对象的类型。

示例试用代码

 JSONObject js1 = new JSONObject(
   "{\"a\": 1, \"b\": \"str\", \"dob\":\"/Date(1463667774000+0000)/\"}");

                Iterator<String> keys = js1.keys();
                while(keys.hasNext()){
                    Object aObj = js1.get(keys.next());
                    if(aObj instanceof Integer){
                        System.out.println(aObj+" is Integer");
                    }else if(aObj instanceof String){
                        System.out.println(aObj+"is String");
                    }else if(aObj instanceof Date){
                        System.out.println(aObj+"is Date");
                    }
                }

结果:

1 is Integer
str is String
/Date(1463667774000+9000)/ is String

预期结果:

1 is Integer
str is String
/Date(1463667774000+9000)/ is Date

我尝试在org.apache.olingo-olingo-odata2-core-2.0.6.jar中使用 EdmDateTime EdmDateTimeOffset 类,但这不起作用。 它仍然显示/日期(1463667774000 + 9000)/是字符串

1 个答案:

答案 0 :(得分:3)

Json结构不会保留日期类型。你需要自己转换它。

你可以这样做:

    else if(aObj instanceof String) {
        if (aObj.toString().startsWith("/Date")) {
            System.out.println(aObj+" is Date");
        }   
        else
            System.out.println(aObj+" is String");

然后再

        String str = "/Date(1463667774000-9000)/";
        Date date = new Date(Long.parseLong(str.replaceAll(".*?(\\d+).*", "$1")));