¿Cómo agrego un par nombre-valor a JSONArray?

Estoy enviando un objeto json a una URL REST como:

JSONObject loan=new JSONObject();
loan.put("clientId", "1");
loan.put("productId", "1");

Ahora también tengo que enviar una matriz como parte de la carga útil:

{  
    "clientId": 1,
    "productId": 1, 
    "disbursementData": [
        {
            "expectedDisbursementDate":"21 December 2018",
            "principal":2000,
            "approvedPrincipal":2000
        }
    ]    
}

¿Cómo envío los datos de desembolso de la matriz usando el objeto JSON como lo estoy haciendo con los otros elementos?

He intentado usar:

JSONArray arr = new JSONArray();
arr.put("expectedDisbursementDate","21 December 2018");
arr.put("principal", "1000");
arr.put("approvedPrincipal", "1000");
loan.put("disbursementData", arr);

Me sale la siguiente excepción:

El método put (int, boolean) en el tipo JSONArray no es aplicable para los argumentos (String, String).

Parece que mi problema es agregar un par nombre-valor a JSONArray. ¿Alguna ayuda sobre cómo puedo lograr esto?

Respuesta 1

Debe crear un JSONObject, ponerlo en un JSONArray y luego agregarlo a su primer JSONObject, pruebe el siguiente código:

    JSONObject aux=new JSONObject();
    aux.put("expectedDisbursementDate","21 December 2018");
    aux.put("principal", "1000");
    aux.put("approvedPrincipal", "1000");
    JSONArray arr = new JSONArray();
    arr.put(aux);
    loan.put("disbursementData",arr);
Respuesta: 2

La lógica sería la misma para cualquier biblioteca, pero la sintaxis será diferente. Estoy usando la com.google.gsonbiblioteca

Crear objeto para colocar en la matriz:

JsonObject jsonObj = new JsonObject();
jsonObj.addProperty("expectedDisbursementDate", "21 December 2018");
jsonObj.addProperty("principal", "2000");
jsonObj.addProperty("approvedPrincipal", "2000");

Cree la matriz y agréguele el objeto:

JsonArray jsonArray = new JsonArray();
jsonArray.add(jsonObj);

Agregue la matriz al objeto json original:

JsonObject loan = new JsonObject();
loan.addProperty("clientId", "1");
loan.addProperty("productId", "1");
loan.addProperty("disbursementData", jsonArray.toString());
Respuesta: 3

JSONArray implementa la Colección (la implementación de json.org de la cual se deriva esta API no tiene JSONArray implementa la Colección). Y JSONObject tiene un método put () sobrecargado que toma una Colección y la envuelve en un JSONArray (lo que causa el problema). Creo que necesita forzar el otro método JSONObject.put () para ser utilizado:

intenta agregar debajo de la línea

loan.put ("disbursementData", (Object) arr);

Debe presentar un error con el proveedor, bastante seguro de que su método JSONObject.put (String, Collection) está roto.

Respuesta: 4

¿Cuál es la forma ideal de crear un video en la plataforma Android usando JAVA? Intenté usar ffmpeg pero realmente tuve problemas para compilarlo. Sé que hay una clase que admite todas estas cosas en iOS, ...

Estamos utilizando Openshift infra. Tenemos Dynatrace para la recopilación de métricas, pero aún no está en buenas condiciones. Nuestra aplicación Java en uno de los Pod no funciona. Utilizamos gradle build y hemos mencionado ...

¿Alguien puede sugerirme una solución de código abierto java bpm / workflow para operar una gran cantidad de registros en la base de datos. Estos registros pueden estar en millones. Y cada registro creará un subflujo de trabajo para ...

Estoy hablando del equivalente de p5.js en Java llamado Procesamiento usando el cual puedo programar muchos elementos gráficos y tiene capacidades de manejo de eventos. He escrito mi código Java dentro del ...