Разбор JSON в SpringBoot - PullRequest
       8

Разбор JSON в SpringBoot

0 голосов
/ 30 апреля 2020

Я хочу проанализировать мои JSON данные с помощью SpringBoot. Тем не менее, я сталкиваюсь с некоторыми проблемами при этом. Например, скажите, что мой Ввод JSON выглядит следующим образом:

{
    "name": "XYZ",
    "gender" : "MALE",
    "Male Item" : {
        "property1": "abc",
        "property2" : "xxx"
    }
}

Однако, если, скажем, мой вклад имеет такую ​​структуру:

{
    "name": "XYZ",
    "gender" : "FEMALE",
    "Female Item" : {
        "property3": "abcd",
        "property4" : "xffxx"
    }
}

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

1 Ответ

1 голос
/ 30 апреля 2020

@SerializedName является ключом, чтобы решить эту проблему. Вот как бы это реализовать:

Pojo Class UserResponse.java

class UserResponse {
        private String name;
        private String gender;
        @SerializedName("Male Item")
        private Map<String, String> maleProp;
        @SerializedName("Female Item")
        private Map<String, String> femaleProp;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getGender() {
            return gender;
        }

        public void setGender(String gender) {
            this.gender = gender;
        }

        public Map<String, String> getMaleProp() {
            return maleProp;
        }

        public void setMaleProp(Map<String, String> maleProp) {
            this.maleProp = maleProp;
        }

        public Map<String, String> getFemaleProp() {
            return femaleProp;
        }

        public void setFemaleProp(Map<String, String> femaleProp) {
            this.femaleProp = femaleProp;
        }

        @Override
        public String toString() {
            return "UserResponse{" +
                    "name='" + name + '\'' +
                    ", gender='" + gender + '\'' +
                    ", male=" + maleProp +
                    ", female=" + femaleProp +
                    '}';
        }
    }

Использует функцию для чтения из потока / строки и последующего преобразования ее в pojo

private static UserResponse jsonToPojo(String fileName) throws FileNotFoundException {
        File file = new File(fileName);
        JsonReader jsonReader = new JsonReader(new FileReader(file));
        Gson gson = new Gson();
        return gson.fromJson(jsonReader, UserResponse.class);
}

Это, как бы я назвал, для простоты я использую main метод;

public static void main(String[] args) throws FileNotFoundException {
        System.out.println(jsonToPojo("male.json"));
        System.out.println(jsonToPojo("female.json"));
}

Вывод будет:

UserResponse{name='XYZ', gender='MALE', male={property1=abc, property2=xxx}, female=null}
UserResponse{name='XYZ', gender='FEMALE', male=null, female={property3=abcd, property4=xffxx}}
...