Подтвердить что ты не робот

Как разобрать JSON в int?

Я проанализировал некоторые данные JSON и его работоспособность, пока я храню его в переменных String.

Моя проблема в том, что мне нужен идентификатор в int varableable, а не в 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);


        }

    }
4b9b3361

Ответ 1

Вы можете использовать parseInt:

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

или лучше и более непосредственно метод getInt:

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

Ответ 2

Это зависит от типа свойства, который вы обрабатываете.

Если json-свойство является числом (например, 5), вы можете напрямую использовать Long, чтобы вы могли:

(long) jsonObj.get("id") // with id = 5, cast `5` to 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

Единственная проблема: если вы иногда получаете идентификатор строки или числа (вы не можете предсказать свой формат клиента или он имеет взаимозаменяемость), вы можете получить исключение, особенно если вы используете parseInt/Long на null json объект.

Если вы не используете 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
}

Вы также можете удалить это первое, если и добавить исключение в catch. Надеюсь, это поможет.

Ответ 3

Это очень просто.

Пример JSON:

{
   "value":1
}


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

Ответ 4

Никто из них не работал у меня. Я сделал это, и это сработало:

Для кодирования как json:

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

Чтобы декодировать:

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

Ответ 5

Я использую комбинацию json.get() и instanceof для чтения в значениях, которые могут быть целыми или целыми целями.

Эти три тестовых примера иллюстрируют:

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
}