Преобразование строки JSON в объект со списком объектов внутри него - Java - PullRequest
0 голосов
/ 04 февраля 2019

Мне нужна помощь в десериализации JSON в следующем формате в Java:

data.json

{
   "tokens":[
      {
         "position":1,
         "text":"hello",
         "suggestions":[
            {
               "suggestion":"hi",
               "points":0.534
            },
            {
               "suggestion":"howdy",
               "points":0.734
            }
         ]
      },
   ]
}

Я создал два класса, один с именем Token и другой с именем Suggestion, с атрибутамисоответствие формату JSON.

Token.java

public class Token {
    private int position;
    private String text;
    private List<Suggestion> suggestions;

    public Token(int position, String text, List<Suggestion> suggestions) {
        this.position = position;
        this.text = text;
        this.suggestions = suggestions;
    }
}

Suggestion.java

public class Suggestion {
    private String suggestion;
    private double points;

    public Suggestion(String suggestion, double points) {
        this.suggestion = suggestion;
        this.points = points;
    }

}

Как «распаковать» JSON в список токенов, каждыйиз которых две обязательные строки и список объектов Предложение в качестве своих атрибутов?(В идеале это будет использовать библиотеку Gson)

Я пробовал это, но это не работает:

Gson gson = new Gson();
Type listType = new TypeToken<List<Token>>(){}.getType();

List<Token> tokenList = gson.fromJson(jsonString, listType);

System.out.println(tokenList.get(0));

Спасибо

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Вы должны создать другой класс, скажем Output как

import java.util.List;

public class Output {
    public List<Token> getTokens() {
        return tokens;
    }

    public void setTokens(List<Token> tokens) {
        this.tokens = tokens;
    }

    private List<Token> tokens;
}

, а затем использовать

Output output = new Gson().fromJson(json, Output.class);

, тогда вы можете использовать вывод, чтобы получить список tokens и пойти дальшедля suggestion и т. д.

0 голосов
/ 04 февраля 2019

Если вы используете Джексона, вы должны использовать @JsonProperty над полями.Попробуйте написать свои файлы, как показано ниже:

Публичный класс Token {

@JsonProperty
private int position;

@JsonProperty
private String text;

@JsonProperty
private List<Suggestion> suggestions;

//getters/setters

}

Публичный класс Предложение {

@JsonProperty
private String suggestion;

@JsonProperty
private double points;

// getters/setters

}

0 голосов
/ 04 февраля 2019

Вы можете использовать Джексона TypeReference для достижения этой цели, например:

ObjectMapper objectMapper = new ObjectMapper();
TypeReference<List<Token>> typeReference = new TypeReference<List<Token>>() {};
List<Token> tokens = objectMapper.readValue("<json_stribg>", typeReference);

Подробнее о TypeReference можно прочитать здесь .

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