Как добавить объект в JSONArray - PullRequest
0 голосов
/ 26 апреля 2018

Я хочу добавить объект в массив. Если данные other_amount больше нуля, я хочу добавить еще один объект. Если он равен нулю, он ничего не должен добавлять. Это мой код:

JSONArray acc_data = new JSONArray();
Map<String, Object> myaccount = new LinkedHashMap<>();
for (int i = 0; i < mpay.size(); i++) {
    if(other_amount>0){
        myaccount.put("poAccount", other_account);
        myaccount.put("poAmount", other_amount);
        system.out.println(myaccount);
        //{poAccount=050017, poAmount=12}
    }

    myaccount.put("poAccount", amount_account);
    myaccount.put("poAmount", amount);
    system.out.println(myaccount);
    //{"poAccount":"050016","poAmount":"800"}

    acc_data.add(myaccount);
    system.out.println(acc_data);
    //[{"poAccount":"050016","poAmount":"800"}]
}

Но мне нужно вот так:

//[{"poAccount":"050016","poAmount":"800"},{poAccount=050017, poAmount=12}]

, пожалуйста, помогите мне решить эту проблему.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Подход, которому вы следуете, не будет отвечать вашим требованиям. Вы должны использовать pojo для хранения записей, а затем заполнить массив Json. Вы можете взглянуть на этот код и изменить его в соответствии с вашими требованиями.

public class Test {

public static void main(String[] args) {

    Mypojo mypojo = new Mypojo();
    Gson gson = new Gson();
    JSONArray records = new JSONArray();
    for (int i = 0; i < 1; i++) {
        if (5 > 0) {
            mypojo.setPoAccount("050017");
            mypojo.setPoAmount("12");
            JSONObject objects = new JSONObject(gson.toJson(mypojo));
            records.put(objects);
        }

        mypojo.setPoAccount("050016");
        mypojo.setPoAmount("800");
        JSONObject objects = new JSONObject(gson.toJson(mypojo));
        records.put(objects);
    }

    System.out.println(records);

}

}

Класс Mypojo:

public class Mypojo
{
private String poAmount;

private String poAccount;

public String getPoAmount ()
{
    return poAmount;
}

public void setPoAmount (String poAmount)
{
    this.poAmount = poAmount;
}

public String getPoAccount ()
{
    return poAccount;
}

public void setPoAccount (String poAccount)
{
    this.poAccount = poAccount;
}

@Override
public String toString()
{
    return "ClassPojo [poAmount = "+poAmount+", poAccount = "+poAccount+"]";
}
}
0 голосов
/ 26 апреля 2018

Вы не должны использовать карту для вашего случая. Когда вы поставите пару с существующим в карте ключом, пара будет перезаписана. Например

map.put ("k1","v1");

Карта содержит одну пару "k1": "v1" Следующий звонок

map.put ("k1","newV1");

Первая пара будет перезаписана, а карта все еще содержит 1 пару: "k1": "newV1"

Для вашего случая лучше определить простой класс POJO с 2 полями poAccount и poAmount. И добавьте их в JSONArray

...