2013-03-29 21 views
13

Mam Parsować niektóre dane JSON i ich działa dobrze tak długo, jak przechowywać go w zmiennych String.Jak analizować JSON w int?

Mój problem polega na tym, że potrzebuję identyfikatora w zmiennej int, a nie w String. Próbowałem wykonać rzutowanie int id = (int) jsonObj.get("");

Ale daje komunikat o błędzie, że nie mogę przekonwertować obiektu na int. Więc próbowałem konwertować za pomocą:

String id = (String) jsonObj.get("id"); 
int value = Integer.parseInt(id); 

Ale również, że nie działa. Co jest nie tak. W jaki sposób JSON współpracuje z int? Moje struny działają dobrze tylko wtedy, gdy próbuję zrobić je jako int. Mam problemy.

Oto mój kod:

public void parseJsonData() throws ParseException { 

     JSONParser parser = new JSONParser(); 
     Object obj = parser.parse(jsonData); 
     JSONObject topObject = (JSONObject) obj; 
     JSONObject locationList = (JSONObject) topObject.get("LocationList"); 
     JSONArray array = (JSONArray) locationList.get("StopLocation"); 
     Iterator<JSONObject> iterator = array.iterator(); 

     while (iterator.hasNext()) { 

      JSONObject jsonObj = (JSONObject) iterator.next(); 
      String name =(String) jsonObj.get("name"); 
      String id = (String) jsonObj.get("id"); 
      Planner.getPlanner().setLocationName(name); 
      Planner.getPlanner().setArrayID(id); 


     } 

    } 

Odpowiedz

13

Można użyć parseInt:

int id = Integer.parseInt(jsonObj.get("id")); 

lub lepszy i bardziej bezpośredni sposób getInt:

int id = jsonObj.getInt("id"); 
+3

getInt() nie działa ze zwykłą Json – Josef

+0

Co masz na myśli? Co dokładnie znajduje się w twoim ciągu "id"? –

+0

int id = Integer.parseInt (jsonObj.get ("id")); To jedno zaćmienie chce dodać rzut do String. – Josef

9

To zależy od rodzaju nieruchomości że parsujesz.

Jeśli właściwość json jest liczbą (np 5) można oddać do Longa bezpośrednio, więc można zrobić:

(long) jsonObj.get("id") // with id = 5, cast `5` to long 

Po zdobyciu długa, można rzucić ponownie do int, powodując:

(int) (long) jsonObj.get("id") 

Jeśli właściwość json jest liczbą z cytatami (np "5"), to jest uważany za sznurek, i trzeba zrobić coś podobnego do Integer.parseInt() lub Long.parseLong();

Integer.parseInt(jsonObj.get("id")) // with id = "5", convert "5" to Long 

Jedynym problemem jest, jeśli czasami otrzymać id jest ciągiem lub jako liczbę (nie można przewidzieć formatu Twojego klienta lub robi to zamiennie), można uzyskać wyjątek, zwłaszcza jeśli używasz parseInt/Długi na obiekcie zerowym json.

Jeśli nie używając Java Generics, najlepszym sposobem radzenia sobie z tymi wyjątkami runtime, że używam to:

if(jsonObj.get("id") == null) { 
    // do something here 
} 

int id; 
try{ 
    id = Integer.parseInt(jsonObj.get("id").toString()); 
} catch(NumberFormatException e) { 
    // handle here 
} 

Można też usunąć, że jeśli pierwszy i dodać wyjątek do połowu. Mam nadzieję, że to pomoże.

1

Nie dla nich pracował dla mnie. Zrobiłem to i to działało:

Aby zakodować jako json:

JSONObject obj = new JSONObject(); 
obj.put("productId", 100); 

Aby zdekodować:

long temp = (Long) obj.get("productId"); 
4

Jego bardzo proste.

Przykład JSON:

{ 
    "value":1 
} 


int z = jsonObject.getInt("value"); 
0

użyć kombinacji json.get() i instanceof wczytać wartości, które mogą być liczbami całkowitymi lub łańcuchy całkowitymi.

Te trzy przypadki testowe ilustrują:

int val; 
Object obj; 
JSONObject json = new JSONObject(); 
json.put("number", 1); 
json.put("string", "10"); 
json.put("other", "tree"); 

obj = json.get("number"); 
val = (obj instanceof Integer) ? (int) obj : (int) Integer.parseInt((String) obj); 
System.out.println(val); 

obj = json.get("string"); 
val = (obj instanceof Integer) ? (int) obj : (int) Integer.parseInt((String) obj); 
System.out.println(val); 

try { 
    obj = json.get("other"); 
    val = (obj instanceof Integer) ? (int) obj : (int) Integer.parseInt((String) obj); 
} catch (Exception e) { 
    // throws exception 
}