2013-03-29 16 views
13

Ich habe einige JSON-Daten analysiert und es funktioniert gut, solange ich es in String-Variablen speichern.Wie parse ich JSON in ein int?

Mein Problem ist, dass ich die ID in einem int Varibable und nicht in String benötigen. Ich habe versucht, eine Besetzung zu machen int id = (int) jsonObj.get("");

Aber es gibt eine Fehlermeldung, dass ich ein Objekt nicht zu einem int konvertieren kann. Also habe ich versucht, mit Hilfe zu konvertieren:

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

Aber auch arbeiten, dass nicht. Was ist falsch. Wie arbeitet JSON mit int? Meine Saiten funktionieren nur gut, wenn ich versuche, sie zu einem int zu machen, bekomme ich Probleme.

Hier ist mein Code:

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


     } 

    } 

Antwort

13

Sie parseInt verwenden:

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

oder besser und direkt die getInt Methode:

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

getInt() funktioniert nicht mit einfachen Json – Josef

+0

Was meinen Sie? Was ist genau in deiner 'id' Zeichenfolge? –

+0

int id = Ganzzahl.parseInt (jsonObj.get ("id")); Diese eine Sonnenfinsternis möchte eine Besetzung zu String hinzufügen. – Josef

9

Es hängt von der Art der Immobilie dass du analysierst.

Wenn die json Eigenschaft eine Zahl ist (zB 5) direkt nach Long werfen können, so dass Sie tun können:

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

Nachdem ich die lange, Sie wieder werfen könnte in int, in resultierende:

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

Wenn die json Eigenschaft eine Zahl mit Anführungszeichen (zB „5“) ist, wird ein String betrachtet, und man braucht etwas ähnliches wie Integer.parseInt() oder Long.parseLong() zu tun;

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

Das einzige Problem ist, wenn man manchmal ID ist eine Zeichenfolge oder als Zahl erhalten (Sie kann nicht Ihre Kunden Format vorhersagen oder es tut austauschbar), können Sie eine Ausnahme, vor allem, wenn Sie parseInt verwenden/Gesamt auf einem Null-JSON-Objekt.

Wenn nicht Java Generics verwenden, um die beste Art und Weise mit dieser Laufzeit Ausnahmen zu beschäftigen, die ich benutze, ist:

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

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

Sie könnten auch entfernen, dass die erste, wenn und die Ausnahme von dem Fang hinzufügen. Hoffe, das hilft.

1

Nicht von ihnen arbeitete für mich. Ich tat dies und es funktionierte:

zu kodieren als json:

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

zu entschlüsseln:

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

Es ist sehr einfach.

Beispiel JSON:

{ 
    "value":1 
} 


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

I verwenden eine Kombination von json.get() und Instanceof in Werte zu lesen, die entweder ganze Zahlen oder Integer-Strings sein könnten.

Diese drei Testfälle veranschaulichen:

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 
}