Как написать java классы, представляющие json объект с подобъектами? - PullRequest
0 голосов
/ 19 января 2020
{
    "car" : {
        "color" : "red",
        "year" : "2015",
        "Activities" : [
            {"activeDate" : "2019", "drivenBy" : "Jimmy"},
            {"activeDate" : "2018", "drivenBy" : "Sam"}
        ],
        "maker" : "GM"
    }
}

Я хотел бы написать Java Класс, который представляет вышеупомянутый JSON объект, чтобы использовать его в моем запросе API остальных. Буду признателен за вашу помощь.

Ответы [ 3 ]

3 голосов
/ 19 января 2020

Все в паре фигурных скобок можно рассматривать как java объект. Если у вас квадратные скобки, это означает, что у вас есть список, а простые свойства - это основные c объекты, такие как строки, целые и т. Д.

Так, например:

{
    "house" : {
        "noRooms" : 3,
        "rooms" : [
            {"name" : "kitchen", "surface" : 10.5 },
            {"name" : "bathroom", "surface" : 5 },
            {"name" : "bedroom", "surface" : 12.3 }
        ]
    }
}

В этом, потому что вы начинаете с пары фигурных скобок, у вас есть ваш первый объект, который вы можете назвать как хотите. Из-за отсутствия лучшего имени я назову мое Здание .

Внутри этого здания у меня есть свойство с именем дом . Поскольку это указано в фигурных скобках, это означает, что нам понадобится другой объект. Мы назовем это Дом .

Пройдя глубже, мы увидим два свойства Дом : количество комнат, называемых noRooms и нечто, называемое комнаты , который выглядит как список (обратите внимание на квадратные скобки).

Для количества комнат нам не нужно создавать другой объект, так как большинство фреймворков / утилит знают, как обращаться с этим, целое число будет хорошо. Для вещей внутри списка нам понадобятся специальные объекты, которые мы назовем Комната .

Эти объекты имеют два свойства: имя , которое преобразуется в строку и поверхность , которая может быть double .

Итак, ваши занятия будут выглядеть примерно так:

public class Building {
    private House house;
    //rest of the code
}

public class House {
    private int noRooms;
    private List<Room> rooms;
    //rest of the code
}

public class Room {
    private String name;
    private double surface;
    //rest of the code
}
0 голосов
/ 19 января 2020

На основании json, который вы опубликовали, мы будем называть Java класс Автомобиль . Автомобиль имеет четыре атрибута: цвет, год, деятельность и производитель.

Вы можете просто найти тип данных каждого атрибута, просмотрев файл json. В этом случае у нас есть поля color , year и maker в виде строк, а действия - это список.

Чтобы определить список, лучше создать другой класс с именем «Activity» с двумя атрибутами: activeDate и driveBy (которые оба являются строками)

public class Activity {
    private String activityDate;
    private String drivenBy;
    ...
}

Обязательно добавьте также конструкторы, геттеры и сеттеры.

public class Car {
    private String color;
    private String year;
    private List<Activity> activities;
    private String maker;
    ...
}

Существует несколько онлайн-инструментов для конвертирования json файлов в Java классы, но я предлагаю вам изучить основы и сделать это самостоятельно в будущем, чтобы не застрять в середине более сложного проекта.

Вот интересная статья, которая поможет вам с ней познакомиться: dzone.com: введение в- json -с- java

0 голосов
/ 19 января 2020

Предполагая, что вы используете Джексона в качестве сериализатора, вам потребуется три класса для выполнения сериализации / десериализации на основе предоставленного вами примера JSON объекта:

public class ActivityResource {

    private String activeDate;
    public String getActiveDate() { return activeDate; }
    public void setActiveDate(String activeDate) { this.activeDate = activeDate; }

    private String drivenBy;
    public String getDrivenBy() { return drivenBy; }
    public void setDrivenBy(String drivenBy) { this.drivenBy = drivenBy; }

}

Затем следует :

public class CarResource {

    private String color;
    public String getColor() { return color; }
    public void setColor(String color) { this.color = color; }

    private String year;
    public String getYear() { return year; }
    public void setYear(String year) { this.year = year; }

    @JsonProperty("Activities")
    private List<ActivityResource> activities;
    public List<ActivityResource> getActivities() { return activities; }
    public void setActivities(List<ActivityResource> activities) { this.activities = activities; }

    private String maker;
    public String getMaker() { return maker; }
    public void setMaker(String maker) { this.maker = maker; }

}

И, наконец, это:

public class CarRequestResource {

    private CarResource car;
    public CarResource getCar() { return car; }
    public void setCar(CarResource car) { this.car = car; }

}

Со всем этим вы сможете десериализовать запрос без проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...