Парсинг сложного JSON в android с использованием библиотеки GSON

145
25 апреля 2018, 07:37
{
  "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#"
        ]
      }
    ]
  }
}

Имеется JSON, нужно получить список работников (employee) со всеми полями. Подскажите, пожалуйста, как всё организовать.

Answer 1

Ваши POJO:

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 +
                '}';
    }
}

Десериализация:

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

Вывод в консоль (на примере строки, приведённой в вопросе):

[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#]}]

Пример обработки:

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

Ищем всех работников, которые знают котлин. Вывод в консоль:

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

READ ALSO
Запись postfix в бинарное дерево

Запись postfix в бинарное дерево

Не знаю какая логика записи выражения в формате postfix в бинарное деревоУ меня есть пример: Infix: 2+3*2+6 Postfix: 2 3 2 * 6 + + Должно выглядеть так:

158
Не подключается к серверу по внешнему IP

Не подключается к серверу по внешнему IP

Написал простой чат без GUIКогда подключаюсь к серверу по локальному IP, то подключение происходит

173
Как узнать класс поля в gson

Как узнать класс поля в gson

Нужно узнать класс поля Gson(String, Boolean, Integer

147
MySQL запрос в Node.JS

MySQL запрос в Node.JS

Подскажите новичкуУ меня есть 2 таблицы А и В в таблице А - 2 колонки, А_Ап, А_Давн в таблице В - 2 колонки, В_Ап, В_Давн в каждой таблице по несколько...

194