2013-03-29 18 views
13

Bazı JSON verilerini ve çalıştığı parayı String değişkenlerinde sakladığım sürece ayrıştırdım.JSON bir int nasıl ayrıştırılır?

Sorunum bir int varibable içinde değil Dize kimliğine gereksinimi olduğudur. int id = (int) jsonObj.get("");

Bir nesneyi int'ye dönüştüremediğim bir hata iletisi oluşturmaya çalıştım.

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

Ama aynı zamanda bu çalışmıyor: yüzden kullanarak dönüştürmek için çalıştı. Yanlış olan ne. JSON int ile nasıl çalışıyor? Dizelerim, sadece bir sorun olarak anlamaya çalıştığımda sadece iyi çalışıyor.

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


     } 

    } 

cevap

13

Sen kullanabilir parseInt:

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

veya daha iyi ve daha doğrudan getInt yöntemi:

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

GETINT() basit Json – Josef

+0

ile çalışmıyor Ne demek? Tam olarak id kimliğinizde ne var? –

+0

int id = Integer.parseInt (jsonObj.get ("id")); Bu bir tutulma String'e bir cast eklemek istiyor. – Josef

9

Bu özellik türüne bağlıdır Burada

benim kodudur ayrıştırıyorsun. json tesiste sayı ise

(örneğin 5) Yapabileceğin böylece, doğrudan Long yayın yapabilirsiniz:

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

, sen döküm olabilir uzun aldıktan sonra sonuçlanan tekrar int:

json mülkiyet tırnak (örneğin, "5") ile bir dizi bir dize olarak kabul edilir ve siz Integer.parseInt() veya Long.parseLong() benzer bir şey yapmak gerekiyorsa
(int) (long) jsonObj.get("id") 

; bazen kimliği bir dize var almak veya bir rakam olarak (müşterinizin biçimini tahmin olamaz ya da birbirinin öyle) ise

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

tek sorun /, size parseInt kullanmak, özellikle bir istisna alabilirsiniz, Uzun olduğunu boş bir json nesnesinde.

Java Jenerik, kullandığım bu çalışma zamanı özel başa iyi şekilde kullanarak değilse:

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

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

Ayrıca eğer o ilk kaldırıp catch istisna ekleyebilir. Bu yardımcı olur umarım.

1

Bunlar benim için çalıştı. Bunu yaptım ve işe yaradı:

bir json olarak kodlamak için:

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

deşifre etmek için:

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

Onun çok basit.

Örnek JSON:

{ 
    "value":1 
} 


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

Ya tam sayılar ya da tam sayı şeritleri olabilir değerleri okumak için instanceof json.get() ve bir kombinasyonunu kullanır.

Bu üç test durumları göstermektedir:

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 
} 
İlgili konular