java

csga3l58  于 2021-07-12  发布在  Java
关注(0)|答案(3)|浏览(149)

我需要在java中以以下格式反序列化json的帮助:
数据.json

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

我创建了两个类,一个称为token,另一个称为suggestion,属性与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;
    }
}

建议.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));

谢谢

inn6fuwd

inn6fuwd1#

你必须创建另一个类,比如说 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

jv4diomz

jv4diomz2#

你可以用Jackson的 TypeReference 为此,例如:

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

你可以阅读更多关于 TypeReference 在这里。

oknwwptz

oknwwptz3#

如果您使用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

}

相关问题