我需要帮助在Java中的格式如下deserialising JSON:
data.json
{
"tokens":[
{
"position":1,
"text":"hello",
"suggestions":[
{
"suggestion":"hi",
"points":0.534
},
{
"suggestion":"howdy",
"points":0.734
}
]
},
]
}
我创建了两个班,一个叫令牌和另一个名为建议,与属性相匹配的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));
谢谢
你必须创建另一个类说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
等
您可以使用杰克逊的TypeReference
实现这一目标,例如为:
ObjectMapper objectMapper = new ObjectMapper();
TypeReference<List<Token>> typeReference = new TypeReference<List<Token>>() {};
List<Token> tokens = objectMapper.readValue("<json_stribg>", typeReference);
你可以阅读更多关于TypeReference
here。
如果你使用杰克逊,你应该上述领域中使用@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
}