我将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添加名称/值对。我如何实现此目标有帮助吗?
答案 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
}