21

一部の JSON データを解析しましたが、文字列変数に保存している限り、正常に機能しています。

私の問題は、文字列ではなく int 変数で ID が必要なことです。キャストを作ってみました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);


        }

    }
4

6 に答える 6

22

You may use parseInt :

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

or better and more directly the getInt method :

int id = jsonObj.getInt("id");
于 2013-03-29T08:43:07.640 に答える
12

解析するプロパティ タイプによって異なります。

json プロパティが数値 (例: 5) の場合、Long に直接キャストできるため、次のようにすることができます。

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

long を取得した後、再び int にキャストすると、次のようになります。

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

json プロパティが引用符付きの数値 (例: "5") の場合、これは文字列と見なされ、Integer.parseInt() または Long.parseLong(); と同様の処理を行う必要があります。

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

唯一の問題は、ID を文字列または数値として受け取ることがある場合 (クライアントの形式を予測できないか、互換的に行う場合)、特に null json オブジェクトで parseInt/Long を使用する場合に、例外が発生する可能性があることです。

Java Generics を使用しない場合、私が使用するこれらの実行時例外を処理する最善の方法は次のとおりです。

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

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

最初に if を削除し、例外を catch に追加することもできます。お役に立てれば。

于 2015-07-02T20:52:07.403 に答える
4

とてもシンプルです。

JSON の例:

{
   "value":1
}


int z = jsonObject.getInt("value");
于 2016-09-22T08:39:13.213 に答える
2

それらのどれも私のために働いていませんでした。私はこれを行いましたが、うまくいきました:

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

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

デコードするには:

long temp = (Long) obj.get("productId");
于 2015-11-02T16:15:40.587 に答える