Как создать один общий класс jsondatareader для разных JSON - PullRequest
0 голосов
/ 01 марта 2019

Я создал клиентский файл json, как показано ниже:

[{"firstName": «test», «lastName»: «temp», «age»: 35, «emailAddress»: «test @ Gmail».com "," address ": {" streetAddress ":« тестовое тестирование »,« city »:« city »,« postCode »:« 12343546 »,« state »:« state »,« country »:« cy »,"county": "abc"}, "phoneNumber": {"home": "012345678", "mob": "0987654321"}}, {"firstName": «tug», «lastName»: «kjk», "age ": 35," emailAddress ":" jhgj@Gmail.com "," address ": {" streetAddress ":" jh hjgjhg, "city": "kjhjh", "postCode": "122345", "state":«Jhgl», «страна»: «jaj», «графство»: «jhgkg»}, «phoneNumber»: {«home»: «012345678», «mob»: «0987654321»}}]

Для файла данных Customer JSON я создал ниже класс JSON datareader:

public class JsonDataReader {
    private final String customerFilePath = new ConfigFileReader().getTestDataResourcePath() + "Customer.json";
    private List<Customer> customerList;

    public JsonDataReader(){
        customerList = getCustomerData();
    }

    private List<Customer> getCustomerData() {
        Gson gson = new Gson();
        BufferedReader bufferReader = null;
        try {
            bufferReader = new BufferedReader(new FileReader(customerFilePath));
            Customer[] customers = gson.fromJson(bufferReader, Customer[].class);
            return Arrays.asList(customers);
        }catch(FileNotFoundException e) {
            throw new RuntimeException("Json file not found at path : " + customerFilePath);
        }finally {
            try { if(bufferReader != null) bufferReader.close();}
            catch (IOException ignore) {}
        }
    }

    public final Customer getCustomerByName(String customerName){
        for(Customer customer : customerList) {
            if(customer.firstName.equalsIgnoreCase(customerName)) return customer;
        }
        return null;
    }


}

Создан класс POJO, как показано ниже:

public class Customer {
        public String firstName;
        public String lastName;
        public int age;
        public String emailAddress;
        public Address address;
        public PhoneNumber phoneNumber;

        public class Address {
            public String streetAddress;
            public String city;
            public String postCode;
            public String state;
            public String country;
            public String county;
        }

        public class PhoneNumber {
            public String home;
            public String mob;
        }

}

Это работает нормально, так как есть только одинФайл данных JSON, однако я создам больше файлов данных JSON, поэтому, возможно, мне придется создать несколькочаевые POJO для каждого, но есть ли способ, которым я могу написать общий универсальный класс jsondatareader для всех этих файлов JSON?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Если это так, то почему бы не преобразовать JSON в карту вместо POJO!Если вы пойдете по маршруту POJO, то вы будете активно использовать Джексона или GSon в своей кодовой базе, добавляя кучу служебных методов для итерации по каждому полученному JSonArray или JSonelements.

0 голосов
/ 01 марта 2019

A class (или Object) является четко определенной сущностью.Под четко определенным я подразумеваю, что его структура известна во время компиляции и не может быть изменена после этого момента.

Идея создания нескольких классов для представления нескольких JSON документов - это прекрасно.Так что, если вы беспокоитесь о количестве файлов, которые вы создадите, это не проблема.

Но, если структура документа JSON будет изменяться вместе с каждым запросом, нет смысла определять серию классов.Чтобы справиться с полностью динамическим JSON, вам следует придерживаться того, что Gson предлагает вам.Это JsonElement и его подклассы.

JsonElement
  > JsonArray
  > JsonObject
  > JsonPrimitive
  > JsonNull

Это все, что нужно для описания JSON объекта.

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