Как игнорировать связанные с Map фигурные скобки при преобразовании json в объект Java с использованием Jackson - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь преобразовать JSON в объект Java, но мне трудно построить эквивалентный Java-объект.

Мой JSON выглядит следующим образом

{
    "point1": {
        "x": 1.0,
        "y": 2.0
    },
    "point2": {
        "x": 1.0,
        "y": 2.0
    },
    "point3": {
        "x": 1.0,
        "y": 2.0
    },
    "customobject1": "cust1",
    "customobject2": "cust2"
}

Мне нужноВозьмите Карта здесь для очков, потому что будет n очков,

public class Test {

    public String getCustomobject1() {
        return customobject1;
    }

    public void setCustomobject1(String customobject1) {
        this.customobject1 = customobject1;
    }

    public String getCustomobject2() {
        return customobject2;
    }

    public void setCustomobject2(String customobject2) {
        this.customobject2 = customobject2;
    }

    Map<String, Point> testing  = new HashMap<>();

    String customobject1;
    String customobject2; 

    public Map<String, Point> getTesting() {
        return testing;
    }

    public void setTesting(Map<String, Point> testing) {
        this.testing = testing;
    }

}

Но я получаю исключение нераспознанного свойства, я знаю, что есть дополнительная оболочка ({} ), который вызывает эту проблему. Может ли кто-нибудь предложить мне, как игнорировать это имя карты при десериализации JSON?

Примечание. Фактический объект, над которым я работаю, немного сложен со сходной структурой,Я публикую здесь только прототип.

1 Ответ

0 голосов
/ 28 февраля 2019

Если вы не знаете ключи заранее, используйте @JsonAnySetter для их сопоставления:

Маркерная аннотация, которая может использоваться для определения нестатического, два-argument метод (имя первого аргумента свойства, второе значение для установки), который будет использоваться в качестве обработчика «отката» для всех нераспознанных свойств, найденных в содержимом JSON.По поведению он похож на XmlAnyElement;и может использоваться только для обозначения одного свойства для каждого типа.

Если используется, все несопоставленные пары ключ-значение из значений объекта JSON добавляются в свойство (типа Map или bean).

public class Test  {
  private Map<String, Point> points = new HashMap<>();

  @JsonAnySetter
  public void setPoints(String name, Point value) {
    points.put(name, value);
  }

}
...