javax.json: construya una matriz JSONA a partir de una lista <Integer> y agréguela a un objeto JSON

Tarea simple pero no pude encontrar una manera de hacerlo.

Mi salida JSON debe ser

{
   "id" : "somestring", 
   "nums" : [44,31,87,11,34]
}

Estoy usando la javax.jsonbiblioteca con JSONObject/ JsonArray. Hay uno List<Integer>que viene con los valores para el segundo campo. Estos no son objetos, estos son números simples. No sé cómo obtener un valor JSON de un número entero.

        Map<String, Object> config = new HashMap<String, Object>();
        JsonBuilderFactory factory = Json.createBuilderFactory(config);
        JsonArray jsonArray = (JsonArray) Json.createArrayBuilder();
        for (Integer num: nums) // Assume a List<Integer> nums
            jsonArray.add(..); // What to do here? JSONValue from an Integer?
                               // Can't do jsonArray.add(num)

        // Final Object
        JsonObject value = factory.createObjectBuilder()
            .add("id", id)
            .add("nums", jsonArray); // Link up jsonArray to the 2nd Add

Nota: no se puede agregar un entero directamente, ingrese la descripción de la imagen aquí

Respuesta 1

createArrayBuilderEl método devolverá el JsonArrayBuilderobjeto, no debe realizar la conversión de tipo explícito. Así que primero cree constructor de matriz y luego añadir Integersa ella

JsonArrayBuilder jsonArray = Json.createArrayBuilder();
    for (Integer num: nums) {
        jsonArray.add(num); 
      }

Luego finalmente llame al buildmétodo que construiráJsonArray

JsonArray array = jsonArray.build();
Respuesta: 2

SOLUCIÓN FINAL (gracias Deadpool)

        Map<String, Object> config = new HashMap<String, Object>();
        JsonBuilderFactory factory = Json.createBuilderFactory(config);
        JsonArrayBuilder jsonArrayBuilder = Json.createArrayBuilder();
        for (Integer num: nums) 
            jsonArrayBuilder.add(temp); // Note: adding to the Array Builder here

        // Now add to the final object
        JsonObject obj = factory.createObjectBuilder()
            .add("id", id)
            .add("nums", jsonArrayBuilder)  /* Note the Array Builder is passed in */
            .build();

        // The full object is complete now and can be printed
        // It looks like: { "id":"string", "nums":[4,6,1,2] }
        System.out.println("Object: \n" + obj.toString());
Respuesta: 3

Veo en su código que ya está usando en el bucle la clase Integer , que es un contenedor de tipo objeto de tipo primitivo int . Entonces, la llamada jsonArray.add debería funcionar porque num es un objeto y no un tipo primitivo.

for (Integer num: nums) // Assume a List<Integer> nums
            jsonArray.add(num); 
Respuesta: 4

Al pasar datos (serialización de datos) desde Java (servidor) a Flex (cliente), los nombres del objeto cambian. Por favor encuentre los detalles a continuación. Java Pojo public class MSC {cadena pública ...

Necesito controlar la visibilidad de un botón de acción flotante que se encuentra en una BottomSheet desde una clase Fragment, pero cuando trato de configurar su visibilidad me sale este mensaje de error: ...

Usando JTextArea, me gustaría que la primera línea sea un texto simple (Título de JTextArea). ¿Hay alguna manera de alinear el centro de texto en la primera línea?

Tengo una tabla llamada tblMainData con varias columnas con un par de ellas con un ancho de 0. Quiero almacenar todos los datos en la tabla excepto aquellas columnas con 0 de ancho en una matriz bidimensional. ...