按属性对JSON输出进行分组

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

我有一个源JSON字符串,我想转换为本地属性JSON。我正在努力实现:

    {
      "dep": 1552928400000,
      "des": "USA",
      "listWagonDetail": [
          {
              "listSeatDetail": [
                  {
                      "seatColumn": "A",
                      "seatRow": "1",
                      "seatStatus": "1",
                      "subclass": "C"
                  },
                  {
                      "seatColumn": "A",
                      "seatRow": "2",
                      "seatStatus": "0",
                      "subclass": "C"
                  },
                  {
                      "seatColumn": "A",
                      "seatRow": "3",
                      "seatStatus": "1",
                      "subclass": "C"
                  }
              ],
              "numSeat": 0,
              "wagonCode": "PRE",
              "wagonNo": "1"
          },
          {
              "listSeatDetail": [
                  {
                      "seatColumn": "A",
                      "seatRow": "1",
                      "seatStatus": "0",
                      "subclass": "C"
                  },
                  {
                      "seatColumn": "A",
                      "seatRow": "2",
                      "seatStatus": "0",
                      "subclass": "C"
                  },
                  {
                      "seatColumn": "A",
                      "seatRow": "3",
                      "seatStatus": "1",
                      "subclass": "C"
                  }
              ],
              "numSeat": 0,
              "wagonCode": "PRE",
              "wagonNo": "2"
          }
     ],
      "numWagon": 0,
      "org": "AU",
      "subClass": null,
      "trainNo": "77"
  }

这是由WagonNo对每个listSeatDetail进行分组。但是我在我的工作中得到了这个,其中“numSeat”,“wagonCode”和“WagonNo”在每个listSeatDetail循环,并且只显示每个数组的最后数据:

{
    "dep": 1552928400000,
    "des": "USA",
    "listWagonDetail": [
        {
            "listSeatDetail": [
                {
                    "seatColumn": "A",
                    "seatRow": "3",
                    "seatStatus": "1",
                    "subclass": "C"
                }
            ],
            "numSeat": 0,
            "wagonCode": "PRE",
            "wagonNo": "2"
        },
        {
            "listSeatDetail": [
                {
                    "seatColumn": "A",
                    "seatRow": "3",
                    "seatStatus": "1",
                    "subclass": "C"
                }
            ],
            "numSeat": 0,
            "wagonCode": "PRE",
            "wagonNo": "2"
        },
        {
            "listSeatDetail": [
                {
                    "seatColumn": "A",
                    "seatRow": "3",
                    "seatStatus": "1",
                    "subclass": "C"
                }
            ],
            "numSeat": 0,
            "wagonCode": "PRE",
            "wagonNo": "2"
        },

我怎样才能实现第一个JSON?这是我的代码的一部分:

private void generateSeat(GetSeatRequest request, GetSeatMapResponse seatMapResponse,
        SeatMapResponsePojo seatmapResponsePojo) {

    seatMapResponse.setDepDate(request.getDepDate());
    seatMapResponse.setDes(request.getDes());
    seatMapResponse.setOrg(request.getOrg());
    seatMapResponse.setTrainNo(request.getTrainNo());
    seatMapResponse.setNumWagon(0);
    seatMapResponse.setSubClass(request.getSubClass());

    List<WagonDetail> listWagonDetail = new ArrayList<>();
    for (SeatMapPojo seatmap : seatmapResponsePojo.getPayload()) {

        WagonDetail wagon = new WagonDetail();
        String wagonNoString = seatmap.getStamformdetcode();
        String[] wagonNo = wagonNoString.split("-");            

        for (WagonDetail wagondetail : listWagonDetail) {

            wagondetail.setNumSeat(0);
            wagondetail.setWagonCode(wagonNo[0]);
            wagondetail.setWagonNo(wagonNo[1]);

            List<SeatDetail> listSeatDetail = new ArrayList<>();
            SeatDetail seatDetail = new SeatDetail();

            seatDetail.setSeatColumn(seatmap.getWagondetcol());
            seatDetail.setSeatRow(seatmap.getWagondetrow());
            seatDetail.setSeatStatus(seatmap.isIsavilable() ? "0" : "1");
            seatDetail.setSubclass(seatmap.getSubclass());
            listSeatDetail.add(seatDetail);

            wagondetail.setListSeatDetail(listSeatDetail);
        }


        listWagonDetail.add(wagon);
    }

    seatMapResponse.setListWagonDetail(listWagonDetail);
}
java arrays handler
1个回答
0
投票

我建议你使用google Gson,这是迄今为止我们发现的最好的JSON序列化/反序列化库。

您可以像这样定义所需的类:

class Output{
    private int depDate;
    private String des;
    ...
    private List<WagonDetail> listWagonDetail;

    //... getter()/setter()

}

然后你可以定义WagonDetail

class WagonDetail{

     private List<SeatDetail> listSeatDetail;
     private int numSeat;
     ....
}

然后上课SeatDetail

你可以使用gson很容易地序列化该类输出:

Output output = new Output();
//set according attributes using setter/getter
Gson gson = new Gson();
String jsStr = gson.toJson(output);

将JSON字符串反序列化为对象也很容易:

String jsStr = "..."
Gson gson = new Gson();
Output output = gson.fromJson(jsStr, Output.class);
© www.soinside.com 2019 - 2024. All rights reserved.