Как добавить ArrayList в JsonObject в Котлине - PullRequest
0 голосов
/ 04 декабря 2018

PaymentDetails class

data class PaymentDetails(
val type:String,
val bank: String,
val branch: String,
val account_no: String,
val cheque_date:String,
val return_type:Boolean,
val cheque_no:String,
val return_cheque_no:String,
val amount:String)

Добавление к объекту Json

  var obj = JSONObject(myPreference!!.getJsonObject());
    Log.e("test Object add", obj.get("reciptDetail").toString())

    val paymentDetails : PaymentDetails = PaymentDetails(type, "", "", "","",false,"","",viewPaymentCash!!.etxt_amount.text.toString())
    myList.add(paymentDetails)
    val jsArray = Gson().toJson(myList)
    var obj2 = JSONObject(obj.get("reciptDetail").toString());

    obj2.remove("payment_details")
    obj2.put("payment_details",jsArray)

    Log.e("cash Object", obj2.toString())

Здесь я попытался добавить новый Arraylist к существующему JsonObject.Проблема в том, что конечный объект Json не соответствует ожиданиям.Как я могу решить эту проблему?Ниже я описал то, что ожидал и что получил.Спасибо заранее

Ожидаемый

{"receiptNo":"fggff","todate":"4\/12\/2018","remark":"","payment_details":[{"account_no":" ","amount":"600","bank":"","branch":"","cheque_date":"","cheque_no":"","return_cheque_no":"","type":"Cash","return_type":false}]}

Что я получил от кода выше

{"receiptNo":"fggff","todate":"4\/12\/2018","remark":"","payment_details":"[{\"account_no\":\"\",\"amount\":\"600\",\"bank\":\"\",\"branch\":\"\",\"cheque_date\":\"\",\"cheque_no\":\"\",\"return_cheque_no\":\"\",\"type\":\"Cash\",\"return_type\":false}]"}

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

при указании @shkschneider gson.toJson() возвращает строковое значение, и вы добавляете эту строку непосредственно в свой объект json. Вам необходимо преобразовать ее в массив json, а затем добавить.

JSONArray jsArray = new JSONArray(Gson().toJson(myList))
var obj2 = JSONObject(obj.get("reciptDetail").toString())
obj2.remove("payment_details")
obj2.put("payment_details",jsArray)
Log.e("cash Object", obj2.toString())
0 голосов
/ 04 декабря 2018

Gson().toJson(myList) возвращает String.

Вы должны построить JSONArray и добавить его элементы.Затем добавьте этот истинный массив.Это просто работает:

JsonArray array = new JsonArray();
array.add("test1");
array.add("test2");
JsonObject object = new JsonObject();
object.add("arr", array);

Вы также можете испортить объекты JSON и GSON.Здесь я просто использовал объекты Gson.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...