[英]Converting a list of json objects to java object using gson, gets null
[英]Converting a JSON string into an object with a list of objects inside it - Java
我需要以下Java格式反序列化JSON的幫助:
data.json
{
"tokens":[
{
"position":1,
"text":"hello",
"suggestions":[
{
"suggestion":"hi",
"points":0.534
},
{
"suggestion":"howdy",
"points":0.734
}
]
},
]
}
我已經創建了兩個類,一個類稱為Token,另一個類稱為uggestination,其屬性與JSON格式匹配。
令牌.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;
}
}
Recommendation.java
public class Suggestion {
private String suggestion;
private double points;
public Suggestion(String suggestion, double points) {
this.suggestion = suggestion;
this.points = points;
}
}
如何將JSON“解包”到Token列表中,每個Token都有兩個必需的字符串和一個Recommendation對象列表作為其屬性? (理想情況下,它將使用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));
謝謝
您可以使用Jackson的TypeReference
實現此目的,例如:
ObjectMapper objectMapper = new ObjectMapper();
TypeReference<List<Token>> typeReference = new TypeReference<List<Token>>() {};
List<Token> tokens = objectMapper.readValue("<json_stribg>", typeReference);
您可以在此處閱讀有關TypeReference
更多信息。
您必須創建另一個類, 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
等
如果您使用Jackson,則應在上方字段中使用@JsonProperty。 嘗試按以下方式編寫文件:
公共類令牌{
@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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.