2016-07-15 6 views
1

Ich habe ein JsonObject mit gemischten Datentyp Werte. Ich möchte ihre Klassen erkennen, damit ich weiterarbeiten kann.Wie überprüft man den JSON-Datumstyp eines Wertes von einem JSONObject?

Ich kann jedoch nicht den Objekttyp überprüfen, wenn ihre Klasse Json Datumstyp ist.

Beispielprobecode Ich habe

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"); 
        } 
       } 

Ergebnis:

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

Erwartetes Ergebnis:

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

Ich versuchte mit EdmDateTime und EdmDateTimeOffset Klasse in org.apache.olingo-olingo-odata2-Core-2.0.6.jar, aber das funktioniert nicht. Noch zeigt es/Datum (1463667774000 + 9000)/ist String

Antwort

2

JSON-Strukturen halten keine Datumstypen. Sie müssen es selbst konvertieren.

Sie könnten tun:

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

dann später

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