15

How to get an Integer instead of Long from JSON?

I want to read JSON in my Java program, but when I get a JSON value which is a number, my parser returns a number of type Long.

I want to get an Integer. I tried to cast the long to an integer, but java throws a ClassCastException (java.lang.Long cannot be cast to java.lang.Integer).

I tried several things, such as first converting the long to a string, and then converting with Integer.parseInt(); but also that doesn't work.

I am using json-simple

Edit:

I still can't get it working. Here is an example: jsonItem.get("amount"); // returns an Object

I can do this:

(long)jsonItem.get("amount");

But not this:

(int)jsonItem.get("amount");

I also can't convert it with

Integer newInt = new Integer(jsonItem.get("amount"));

or

Integer newInt = new Integer((long)jsonItem.get("amount"));
user2190492
  • 1,174
  • 2
  • 9
  • 37
  • 1
    The `Long` object has an `intValue()` method. – Alexis C. Jan 01 '14 at 13:34
  • Now it looks like you are deliberately trying to come up with each possible variation on the right solution that is not right. Why don't you just follow the example provided to you by either Hot Licks or Joop Eggen? – Marko Topolnik Jan 01 '14 at 13:52
  • I got it working. Thanks. I was confused by the classes and data types – user2190492 Jan 01 '14 at 14:05
  • Listen carefully: JSON is returning a `Long` *object*. That object contains within it a `long` value. If you want that value to be represented in an `Integer` object you must extract the value from the `Long` object and create a new `Integer` object from the value. – Hot Licks Jan 01 '14 at 14:14

2 Answers2

9

Please understand that Long and Integer are object classes, while long and int are primitive data types. You can freely cast between the latter (with possible loss of high-order bits), but you must do an actual conversion between the former.

Integer newInt = new Integer(oldLong.intValue());
Hot Licks
  • 47,103
  • 17
  • 93
  • 151
1

I tried

(int)(long)jsonItem.get("amount");  

and it worked for me

Suraj Rao
  • 29,388
  • 11
  • 94
  • 103