Java 解码标记为值的JSON

Java 解码标记为值的JSON,java,json,jackson,Java,Json,Jackson,我有一个JSON文件,格式如下: { "Cubs": { "city": "Chicago", "league": "National", "division": "Central" }, "Cardinals": { "city": "St. Louis", "league": "National", "division": "Central" } } 我想从解析中得到的是一个映射,其中关键是团队名称 我正试图用Jackson来

我有一个JSON文件,格式如下:

{
  "Cubs": {
    "city": "Chicago",
    "league": "National",
    "division": "Central"
  },
  "Cardinals": {
    "city": "St. Louis",
    "league": "National",
    "division": "Central"
  }
}
我想从解析中得到的是一个
映射
,其中关键是团队名称

我正试图用Jackson来解码——团队的信息结构定义得很好,但是标签是团队的名称。我无法控制输入格式,这是我们使用的

我尝试过用这种方式解析它:

public static class TeamInfo {
    private String city;
    private String league;
    private String division;

    public TeamInfo() {
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getLeague() {
        return league;
    }

    public void setLeague(String league) {
        this.league = league;
    }

    public String getDivision() {
        return division;
    }

    public void setDivision(String division) {
        this.division = division;
    }
}

public Map<String, TeamInfo> parseTeamInfo(String inputFile) {
    Map<String, TeamInfo> teamInfo = null;
    try {
        teamInfo = m_objectMapper.readValue(inputFile, Map.class);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return teamInfo;
}
公共静态类TeamInfo{
私人城市;
私人弦乐联盟;
私人弦乐部;
公共团队信息(){
}
公共字符串getCity(){
回归城市;
}
公共城市(字符串城市){
this.city=城市;
}
公共字符串getLeague(){
回归联盟;
}
公共联盟(弦乐联盟){
这个联盟=联盟;
}
公共字符串getDivision(){
回返司;
}
公共无效集除法(字符串除法){
这个除法=除法;
}
}
公共地图parseTeamInfo(字符串输入文件){
Map teamInfo=null;
试一试{
teamInfo=m_objectMapper.readValue(inputFile,Map.class);
}捕获(IOE异常){
e、 printStackTrace();
}
返回teamInfo;
}
它解析得很好,但生成的对象是一个地图地图,而不是TeamInfo的地图


它同时感觉很近却很遥远。有什么想法可以尝试吗?

我想这应该适合你:

public Map<String, TeamInfo> parseTeamInfo(String inputFile) {
    Map<String, TeamInfo> teamInfo = null;
    try {
        TypeReference<HashMap<String,TeamInfo>> typeRef 
            = new TypeReference<HashMap<String,TeamInfo>>() {};

        HashMap<String,TeamInfo> o = mapper.readValue(inputFile, typeRef); 
    } catch (IOException e) {
        e.printStackTrace();
    }
    return teamInfo;
}
publicmap parseTeamInfo(字符串输入文件){
Map teamInfo=null;
试一试{
类型引用类型引用
=新类型引用(){};
HashMap o=mapper.readValue(inputFile,typeRef);
}捕获(IOE异常){
e、 printStackTrace();
}
返回teamInfo;
}

非常感谢!这是完美的。