{ "company": { "name": "XXX", "age": "15", "competences": [ "Android", "IOS", ".NET", "PHP", "Smart-TV" ], "employees": [ { "name": "John", "phone_number": "769453", "skills": [ "Java", "Android" ] }, { "name": "Diego", "phone_number": "987924", "skills": [ "Java", "Smart-TV" ] }, { "name": "Alfred", "phone_number": "452533", "skills": [ "Objective-C", "Android", "Photoshop" ] }, { "name": "John", "phone_number": "212456", "skills": [ "Java", "Phython" ] }, { "name": "Mat", "phone_number": "778975", "skills": [ "Android", "MovieMaker" ] }, { "name": "Bob", "phone_number": "456468", "skills": [ "Groovy", "Kotlin" ] }, { "name": "Marty", "phone_number": "321789", "skills": [ "Android", "PHP", "C#" ] } ] } } 

There is JSON, you need to get a list of employee with all fields. Tell me, please, how to organize everything.

  • You probably have not seen complex (poorly structured) Json. What you have in the example is easily (ideally) parsed by 1 Single request, and converted via GoogleGSON. Therefore, the question sounds like this JSON. - Shwarz Andrei 2:19 pm

1 answer 1

Your POJOs :

 class MyResponse { private Company company; public MyResponse(Company company) { this.company = company; } // getters & setters } class Company { private String name, age; private List<String> competences; private List<Employee> employees; public Company(String name, String age, List<String> competences, List<Employee> employees) { this.name = name; this.age = age; this.competences = competences; this.employees = employees; } // getters & setters } class Employee { private String name; @SerializedName("phone_number") private String phone; private List<String> skills; public Employee(String name, String phone, List<String> skills) { this.name = name; this.phone = phone; this.skills = skills; } // getters & setters @Override public String toString() { return "Employee{" + "name='" + name + '\'' + ", phone='" + phone + '\'' + ", skills=" + skills + '}'; } } 

Deserialization:

 String json = "ваша строчка"; Gson gson = new Gson(); MyResponse response = gson.fromJson(json, MyResponse.class); System.out.println(response.getCompany().getEmployees()); 

The output to the console (for example, the line given in the question):

[Employee {name = 'John', phone = '769453', skills = [Java, Android]}, Employee {name = 'Diego', phone = '987924', skills = [Java, Smart-TV]}, Employee {name = 'Alfred', phone = '452533', skills = [Objective-C, Android, Photoshop]}, Employee {name = 'John', phone = '212456', skills = [Java, Phython]}, Employee {name = 'Mat', phone = '778975', skills = [Android, MovieMaker]}, Employee {name = 'Bob', phone = '456468', skills = [Groovy, Kotlin]}, Employee {name = ' Marty ', phone =' 321789 ', skills = [Android, PHP, C #]}]

Processing Example:

 response.getCompany().getEmployees().stream() .filter(employee -> employee.getSkills().contains("Kotlin")) .forEach(System.out::println); 

We are looking for all workers who know Kotlin. Output to console:

Employee {name = 'Bob', phone = '456468', skills = [Groovy, Kotlin]}

  • Thank you very much, I was close to the answer, but I could not manage to do everything. Thanks to you I can move on, thanks again. - ChromeClaw