Невозможно проанализировать JSON с Джексоном (отображение не работает) - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь использовать Джексона для разбора образца JSON, как показано ниже. Тем не менее, я синтаксический анализ не работает (не удается без каких-либо исключений - как я получаю пустую строку для event.getAccountId (); Что я могу делать неправильно? Спасибо!

        ObjectMapper om = new ObjectMapper();
    String json = "{\"_procurementEvent\" : [{ \"accountId\" : \"3243234\",\"procurementType\" : \"view\"," +
            "\"_procurementSubType\" : \"Standard Connector\",\"_quantity\" : \"4\", \"_pricePerMonth\" : \"100.00\"" +
            ",\"_annualPrice\" : \"1200.00\"}]}";
    ProcurementEvent event = om.readValue(json, ProcurementEvent.class);

    event.getAccountId(); // returns null    

   @JsonIgnoreProperties(ignoreUnknown = true)
    private static class ProcurementEvent {
        private String _accountId;
        private String _procurementType;
        private String _quantity;
        private String _pricePerMonth;
        private String _annualPrice;

        @JsonProperty("accountId")
        public String getAccountId() {
            return _accountId;
        }

        public void setAccountId(String accountId) {
            _accountId = accountId;
        }

        @JsonProperty("procurementType")
        public String getProcurementType() {
            return _procurementType;
        }

        public void setProcurementType(String procurementType) {
            _procurementType = procurementType;
        }

        @JsonProperty("_quantity")
        public String getQuantity() {
            return _quantity;
        }

        public void setQuantity(String quantity) {
            _quantity = quantity;
        }

        @JsonProperty("_pricePerMonth")
        public String getPricePerMonth() {
            return _pricePerMonth;
        }

        public void setPricePerMonth(String pricePerMonth) {
            _pricePerMonth = pricePerMonth;
        }

        @JsonProperty("_annualPrice")
        public String getAnnualPrice() {
            return _annualPrice;
        }

        public void setAnnualPrice(String annualPrice) {
            _annualPrice = annualPrice;
        }
    }

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Ваш код десериализует экземпляр ProcurementEvent из представления json. Проблема в том, что ваш json представляет собой отображение string=>list of object representation. Вы можете заставить код работать без изменений, но вам нужно отредактировать данные Json; пример будет работать, когда json содержит только object representation.

Изменить данные JSON как:

String json = "{ \"accountId\" : \"3243234\",\"procurementType\" : \"view\","
    + "\"_procurementSubType\" : \"Standard Connector\",\"_quantity\" : \"4\", "
    + "\"_pricePerMonth\" : \"100.00\",\"_annualPrice\" : \"1200.00\"}";

0 голосов
/ 15 сентября 2018

В вопросе попробуйте следующий подход:

class ProcurementEvents {
  private List<ProcurementEvent> _procurementEvent; // + annotations like @JsonIgnoreProperties, getters/ setters, etc.
}

// json from your example
ProcurementEvents events = om.readValue(json, ProcurementEvents.class);
events.get(0).getAccountId();
...