如何将名称/值对添加到JSONArray

时间:2019-01-03 10:26:13

标签: java json

我将json对象发送给REST网址为:

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

现在我还必须发送一个数组作为有效负载的一部分:

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

与其他元素一样,如何使用JSONObject发送数组disbursementData

我尝试使用:

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

我收到以下异常:

  

JSONArray类型的put(int,boolean)方法不适用   输入参数(字符串,字符串)。

看来我的问题是向JSONArray添加名称/值对。我如何实现此目标有帮助吗?

4 个答案:

答案 0 :(得分:1)

任何库的逻辑都是相同的,但是语法会有所不同。我正在使用com.google.gson库。

创建要放置在数组中的对象:

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

创建数组并将对象添加到其中:

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

将数组添加到原始json对象:

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

答案 1 :(得分:1)

您必须创建一个JSONObject,将其放入JSONArray,然后将其添加到您的第一个JSONObject中,请尝试以下代码:

    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);

答案 2 :(得分:0)

JSONArray实现Collection(派生此API的json.org实现没有JSONArray实现Collection)。 JSONObject有一个重载的put()方法,该方法接受一个Collection并将其包装在JSONArray中(因此导致问题)。我认为您需要强制使用其他JSONObject.put()方法:

您尝试在第

行下方添加

loan.put(“ disbursementData”,(Object)arr);

您应该向供应商提出错误,非常确定他们的JSONObject.put(String,Collection)方法已损坏。

答案 3 :(得分:0)

您正在创建JSONArray,数组不是映射,也不支持put(key,value)。 您必须使用put(int index,Object value),其中index是数组索引(与array [index]相同)。 在您的情况下,该值应为JSONObject:

 {
            "expectedDisbursementDate":"21 December 2018",
            "principal":2000,
            "approvedPrincipal":2000
        }