JSON – obțineți simplu un întreg în loc de lung (Programare, Java, Json, Turnare, Număr Întreg, Long Integer)

user2190492 a intrebat.
a intrebat.

Cum se obține un Integer în loc de Long din JSON?

Vreau să citesc JSON în programul meu Java, dar când primesc o valoare JSON care este un număr, parserul meu returnează un număr de tip Long.

Vreau să obțin un Integer. Am încercat să transform valoarea long într-un număr întreg, dar java aruncă o eroare de tip ClassCastException (java.lang.Long nu poate fi transformat în java.lang.Integer).

Am încercat mai multe lucruri, cum ar fi să convertesc mai întâi long într-un șir de caractere și apoi să convertesc cu Integer.parseInt(); dar nici asta nu funcționează.

Eu folosesc json-simple

Edit:

Tot nu reușesc să fac să funcționeze. Iată un exemplu: jsonItem.get(„amount”); // returnează un obiect

Pot să fac acest lucru:

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

Dar nu și acest lucru:

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

De asemenea, nu pot să-l convertesc cu

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

sau

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

Comentarii

  • Long are un intValue() metodă. –  > Por Alexis C..
  • Acum se pare că încerci în mod deliberat să vii cu fiecare variantă posibilă a soluției corecte care nu este corectă. De ce nu urmați pur și simplu exemplul oferit de Hot Licks sau Joop Eggen? –  > Por Marko Topolnik.
  • Am reușit să o fac să funcționeze. Mulțumesc. Am fost confuz din cauza claselor și a tipurilor de date –  > Por user2190492.
  • Ascultați cu atenție: JSON returnează un Long obiect. Acest obiect conține în el un long valoare. Dacă doriți ca această valoare să fie reprezentată într-un fișier Integer trebuie să extrageți valoarea din obiectul Long și să creați un nou obiect Integer obiect din valoarea respectivă. –  > Por Licăriri fierbinți.
1 răspunsuri
Hot Licks

Vă rog să înțelegeți că Long și Integer sunt clase de obiecte, în timp ce long și int sunt tipuri de date primitive. Puteți face în mod liber o distribuție între acestea din urmă (cu o posibilă pierdere de biți de ordin superior), dar trebuie să faceți o conversie reală între primele.

Integer newInt = new Integer(oldLong.intValue());

Comentarii

  • Integer.valueOf(oldLong.intValue()) ar fi de preferat, sau echivalentul, dar mai puțin explicit (int)(long)oldLong. –  > Por Marko Topolnik.
  • @MarkoTopolnik — Da, ar fi mai bine așa. –  > Por Hot Licks.
  • Conform primului exemplu al lui OP, dacă (long)jsonItem.get("amount"); poate fi analizat ca un long, de ce nu un int primitiv? –  > Por dckuehn.