POJOをdeserialisingながら、どのように私は、JSONのルート要素を無視することができます

Ramanuj:

====ルートオブジェクト====

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
public class RoomInventoryResponse {
    private Map<String, InventoryDetail> inventoryDetail = new HashMap<>();

    public Map<String, InventoryDetail> getInventoryDetail() {
        return inventoryDetail;
    }
    public void setInventoryDetail(Map<String, InventoryDetail> inventoryDetail) {
        this.inventoryDetail = inventoryDetail;
    }
   // To String overridden
}

==== InventoryDe​​tail OBJ ====

import java.util.Objects;
public class InventoryDetail {
    private Integer booked;
    private Integer available;
    public Integer getBooked() {
        return booked;
    }
    public void setBooked(Integer booked) {
        this.booked = booked;
    }
    public Integer getAvailable() {
        return available;
    }
    public void setAvailable(Integer available) {
        this.available = available;
    }
   // To String overridden
}

====== ====実行mentod

public class Test{
    public static void main(String[] args) throws JsonProcessingException
     ObjectWriter ow = new  ObjectMapper().writer().withDefaultPrettyPrinter();
            String json = ow.writeValueAsString(request);
            RoomInventoryResponse response = new RoomInventoryResponse();

            Map<String, InventoryDetail> map = new HashMap<>();
            InventoryDetail inventoryDetail = new InventoryDetail();
            inventoryDetail.setAvailable(10);
            inventoryDetail.setBooked(10);
            map.put("2019-02-21", inventoryDetail);

            InventoryDetail inventoryDetail2 = new InventoryDetail();
            inventoryDetail2.setAvailable(15);
            inventoryDetail2.setBooked(10);
            map.put("2019-02-22", inventoryDetail2);

            InventoryDetail inventoryDetail3 = new InventoryDetail();
            inventoryDetail3.setAvailable(15);
            inventoryDetail3.setBooked(10);
            map.put("2019-02-23", inventoryDetail2);
            response.setInventoryDetail(map);
            String json2 = ow.writeValueAsString(response);

       }
    }

電流出力:

Json Format: 
{
  "inventoryDetail" : {
    "2019-02-23" : {
      "booked" : 10,
      "available" : 15
    },
    "2019-02-22" : {
      "booked" : 10,
      "available" : 15
    },
    "2019-02-21" : {
      "booked" : 10,
      "available" : 10
    }
  }
}

期待される結果は:(Iは、出力結果以下のように応答からinventoryDe​​tailを削除するためにwan't)

{
    "2019-09-30": {
        "booked": 0,
        "available": 100
    },
    "2019-09-20": {
        "booked": 0,
        "available": 16
    },
    "2019-09-12": {
        "booked": 0,
        "available": 10
    }
}

別の要件は、私が対応してキャップのルート要素のタグを変更したり、InventoryDe​​tailなどのinventoryDe​​tailメイクのような小さなことができますどのようにキャップまたは小さななどで始まる必要がありますです

Kishanマウリヤ:
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializable;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class RoomInventoryResponse implements JsonSerializable {


    private Map<String, InventoryDetail> inventoryDetail = new HashMap<>();

    public Map<String, InventoryDetail> getInventoryDetail() {
        return inventoryDetail;
    }

    public void setInventoryDetail(Map<String, InventoryDetail> inventoryDetail) {
        this.inventoryDetail = inventoryDetail;
    }

    @Override
    public void serialize(JsonGenerator arg0, SerializerProvider arg1) throws IOException {
        arg0.writeObject(inventoryDetail);
    }

    @Override
    public void serializeWithType(JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException {

    }
}

あなたの最後の質問の場合:

@JsonTypeName("InventoryDetail") // any name
@JsonTypeInfo(include = JsonTypeInfo.As.WRAPPER_OBJECT ,use = JsonTypeInfo.Id.NAME) 
    `

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=314482&siteId=1