2013-03-29 8 views
13

私はString変数に格納している限り、JSONデータとそれが正常に動作しているかどうかを解析しました。JSONをint型に解析するにはどうすればよいですか?

私の問題は、int varibableにIDが必要で、Stringではないということです。 キャストしようとしましたint id = (int) jsonObj.get("");

しかし、オブジェクトをintに変換できないというエラーメッセージが表示されます。 だから私は使用して変換してみました:

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

しかし、また、機能していません。なにが問題ですか。 JSONはintとどのように連携していますか? 私の文字列はintとして問題を解決しようとしたときにのみうまく動作します。

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


     } 

    } 

答えて

13

あなたが使用することparseInt

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

またはより良く、より直接的getInt方法:

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

のgetInt()は、単純なJSON – Josef

+0

で作業されていないあなたが何を意味するのですか?あなたの 'id'文字列には何がありますか? –

+0

int id = Integer.parseInt(jsonObj.get( "id"));この1つのEclipseはStringにキャストを追加したい。 – Josef

9

これは、プロパティのタイプによって異なります。ここ

は私のコードですあなたが解析していること。 JSONのプロパティが数値である場合

(例えば5)あなたができるので、あなたは、直接ロングにキャストすることができます

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

を、あなたが唱えられる長いを取得した後で、その結果、再びintに:

をJSONプロパティは引用符(例えば「5」)との数は、ある文字列とみなされている、とあなたはInteger.parseInt()またはLong.parseLong()に似た何かをする必要がある場合は
(int) (long) jsonObj.get("id") 

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

唯一の問題は、あなたが長いのparseInt /を使用する場合は特に、あなたは時々(あなたは、クライアントの形式を予測傾けるか、同義的にそれをしない)idは文字列だか数として受け取った場合、あなたは例外を取得する可能性があります、ですnullのjsonオブジェクトで

Javaのジェネリックを使用していない場合は、私が使用してこれらの実行時例外に対処するための最良の方法は次のとおりです。

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

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

また、場合、最初のを削除し、キャッチに例外を追加することができます。 これが役立つことを願っています。

1

私のために働いていない人はいません。 私はこれをしなかったし、それが働いた:

は、JSONとしてエンコードするには:

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

はデコードするには:

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

その非常にシンプル。

例JSON:

{ 
    "value":1 
} 


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

は、Iのいずれかの整数または整数の列であるかもしれない値を読み取るためのinstanceof json.get()との組み合わせを使用します。

これらの3つのテストケースが示しています

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 
} 
関連する問題