конвертировать JSON в JSON объект с помощью GSON - PullRequest
0 голосов
/ 29 октября 2018

У меня есть класс, определенный следующим образом -

public class info {
  private final string name;
  private final string add;
  private final Map<String, Skill> skills;
}

public class Skill {
  String subCategory;
  String proficiency;
}

JSON as  -
{
   "name": "abc",
   "add": "random",
   "skills": {
     "java": {
       "subCategory": "soft",
       "proficiency": "A"
     }
    "C#": {
       "subCategory": "soft",
       "proficiency": "B"
     }
  }
}

Как я могу преобразовать этот json в информацию об объекте java? Я пытался использовать библиотеку gson, но столкнулся с несколькими ошибками.

Проблема из-за карты в классе навыков. Не уверен, как конвертировать. я посмотрел на пример Преобразование JSON в объект Java с помощью Gson но это довольно просто - нет списков или карты внутри класса.

1 Ответ

0 голосов
/ 29 октября 2018

В вашем коде есть несколько ошибок, но после исправления он работает.

  • Вы пытаетесь определить строки с string вместо String
  • Вы определяете свои переменные в info как final, и вы не определяете их (удаление окончательного ключевого слова работает)
  • Вам не хватает , в массиве навыков в вашем JSON

Ниже приведен пример, который действительно работает:

public class Main {
    public static void main(String[] args) {
        String json = "{\r\n"
                + "   \"name\": \"abc\",\r\n"
                + "   \"add\": \"random\",\r\n"
                + "   \"skills\": {\r\n"
                + "     \"java\": {\r\n"
                + "       \"subCategory\": \"soft\",\r\n"
                + "       \"proficiency\": \"A\"\r\n"
                + "     },\r\n"
                + "    \"C#\": {\r\n"
                + "       \"subCategory\": \"soft\",\r\n"
                + "       \"proficiency\": \"B\"\r\n"
                + "     }\r\n"
                + "  }\r\n"
                + "}";

        Info info = new Gson().fromJson(json, Info.class);
        System.out.println(info.getSkills());
    }

}

class Info {
    private String name;
    private String add;
    private Map<String, Skill> skills;

    public String getName() {
        return this.name;
    }

    public String getAdd() {
        return this.add;
    }

    public Map<String, Skill> getSkills() {
        return this.skills;
    }
}

class Skill {
    String subCategory;
    String proficiency;
}

Я также позволил себе переименовать info в Info, поскольку имена классов должны начинаться с заглавной буквы и добавляться геттеры для частных переменных.

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