来自JSON数组的POJO的序列化

问题描述 投票:0回答:2

我已经使用序列化生成了以下有效负载

{
  "transactionIds" : 123456,
  "test" : 3000,
  "amount" : {
    "currency" : "USD",
    "value" : 10
  }
}

下面是代码

    Amount a1 = new Amount();
    a1.setCurrency("USD");
    a1.setValue(10);

    Child a2 = new Child();
    a2.setTransactionIds(123456);
    a2.setTest(3000);
    a2.setAmount(a1);

    ObjectMapper mapper = new ObjectMapper();

    String abc = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(a2);

如何添加以生成如下所示的有效负载,我的getter / setter应该如何

{
  "transactions": [
    {
      "transactionIds": 123456,
      "test": 3000,
      "amount": {
        "currency": "USD",
        "value": 10
      }
    }
  ]
}

我尝试了以下内容

private List<Child> transactions;

public List<Child> getTransactions() {
    return transactions;
}

public void setTransactions(List<Child> transactions) {
    this.transactions = transactions;
}

但是我似乎无法正常工作

    Parent a3 = new Parent();
    a3.setTransactions(a2);
java arrays getter-setter
2个回答
2
投票

添加新班级:

public class TransactionWrapper{
  private List<Child > transactions = new ArrayList<>();

  //getter setter

}

 Amount a1 = new Amount();
    a1.setCurrency("USD");
    a1.setValue(10);

    Child a2 = new Child();
    a2.setTransactionIds(123456);
    a2.setTest(3000);
    a2.setAmount(a1);

    TransactionWrapper tw = new TransactionWrapper();
    tw.getTransactions().add(a2);

    ObjectMapper mapper = new ObjectMapper();

    String abc = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(tw);

1
投票

您不能写a3.setTransactions(a2);,因为setTransactions接受Child的列表而不是单个Child

您必须写这样的东西

if (a3.getTransactions() == null) {
    a3.setTransactions(new ArrayList<Child>());
}
a3.getTransactions().add(a2);
© www.soinside.com 2019 - 2024. All rights reserved.