Cómo obtener el valor flotante (número real) de un objeto JSON en Java

Un objeto JSON (de clase JSONObject) es una colección desordenada de pares de nombre/valor. Su forma externa es una cadena envuelta en llaves con dos puntos entre los nombres y valores, y comas entre los valores y los nombres. La forma interna es un objeto que tiene métodos de obtener y optar para acceder a los valores por nombre y poner métodos para agregar o reemplazar valores por nombre.

En Java, puedes importar esta clase usando import org.json.JSONObject. Los objetos de tipo JSONObject tienen una gran cantidad de métodos útiles para recuperar cualquiera de sus valores, por ejemplo getBoolean, getInt, getString, getDouble o getLong. Esos métodos devuelven el valor asignado por su nombre si existe y los convierten en el tipo específico (según el nombre):

JSONObject myObject = new JSONObject("{ \"anyString\":\"Hello World\", \"aNumber\": 123, \"aDouble\": -895.25 }");

myObject.getString("anyString"); // Hello World
myObject.getNumber("aNumber"); // 123
myObject.getDouble("aDouble"); // -895.25

Lamentablemente, para los valores flotantes (números con decimales) no existe un método getFloat que devuelva el tipo requerido. Si eres bueno con las matemáticas y la programación, pensarás que la función getDouble podría funcionar con un número como  12345678987.00, sin embargo, eso proporcionaría 1.2345678987E10 como resultado y getLong eliminará los decimales.

Recuperar valor flotante de un elemento de objeto JSON

Para lograr tu objetivo de obtener un elemento de un objeto JSON en tipo Float, puedes usar la clase Big Decimal. La clase BigDecimal proporciona operaciones para aritmética, manipulación de escala, redondeo, comparación, hash y conversión de formato. La clase BigDecimal le da a su usuario control completo sobre el comportamiento de redondeo. Si no se especifica ningún modo de redondeo y el resultado exacto no se puede representar, se lanza una excepción; de lo contrario, los cálculos se pueden llevar a cabo en el modo de precisión y redondeo elegido al proporcionar un objeto MathContext apropiado para la operación. En cualquier caso, se proporcionan ocho modos de redondeo para el control del redondeo.

Importa la clase BigDecimal usando la siguiente declaración en la parte superior de tu clase:

import java.math.BigDecimal;

Y luego, todo lo que debes hacer es proporcionar el valor doble (que devuelve un valor exponencial) del elemento que necesitas del Objeto JSON como primer parámetro del método BigDecimal.valueOf y del valor devuelto, ejecuta el método floatValue:

JSONObject myObject = new JSONObject("{ \"anyString\":\"Hello World\", \"aNumber\": 123, \"aDouble\": 12345678987.00 }");

float myFloatValue = BigDecimal.valueOf(myObject.getDouble("aDouble")).floatValue();

Que te diviertas !

Esto podría ser de tu interes

Conviertete en un programador más sociable