【问题标题】:How can I write Java Model Class for Json Schema?如何为 Json Schema 编写 Java 模型类?
【发布时间】:2021-09-03 17:27:53
【问题描述】:

问题在于 coachgoalkeepersdefender 之类的实体,我不知道如何为这种响应创建一个类

{
  "squad": [
    [
      "coach",
      [
        {
          "id": 78621,
          "name": "Gareth Southgate",
          "ccode": "ENG",
          "cname": "England"
        }
      ]
    ],
    [
      "goalkeepers",
      [
        {
          "id": 280287,
          "name": "Sam Johnstone",
          "ccode": "8659",
          "cname": "West Bromwich Albion",
          "role": "goalkeepers"
        },
        {
          "id": 303919,
          "name": "Jordan Pickford",
          "ccode": "8668",
          "cname": "Everton",
          "role": "goalkeepers"
        },
        {
          "id": 746395,
          "name": "Aaron Ramsdale",
          "ccode": "8657",
          "cname": "Sheffield United",
          "role": "goalkeepers"
        }
      ]
    ],
    [
      "defenders",
      [
        {
          "id": 159833,
          "name": "Kyle Walker",
          "ccode": "8456",
          "cname": "Manchester City",
          "role": "defenders"
        },
        {
          "id": 191869,
          "name": "Kieran Trippier",
          "ccode": "9906",
          "cname": "Atletico Madrid",
          "role": "defenders"
        },
        {
          "id": 247761,
          "name": "Conor Coady",
          "ccode": "8602",
          "cname": "Wolverhampton Wanderers",
          "role": "defenders"
        },
        {
          "id": 255610,
          "name": "Harry Maguire",
          "ccode": "10260",
          "cname": "Manchester United",
          "role": "defenders"
        },
        {
          "id": 263653,
          "name": "John Stones",
          "ccode": "8456",
          "cname": "Manchester City",
          "role": "defenders"
        },
        {
          "id": 362694,
          "name": "Luke Shaw",
          "ccode": "10260",
          "cname": "Manchester United",
          "role": "defenders"
        },
        {
          "id": 419664,
          "name": "Tyrone Mings",
          "ccode": "10252",
          "cname": "Aston Villa",
          "role": "defenders"
        },
        {
          "id": 672469,
          "name": "Ben Chilwell",
          "ccode": "8455",
          "cname": "Chelsea",
          "role": "defenders"
        },
        {
          "id": 776151,
          "name": "Ben White",
          "ccode": "10204",
          "cname": "Brighton & Hove Albion",
          "role": "defenders"
        },
        {
          "id": 807729,
          "name": "Reece James",
          "ccode": "8455",
          "cname": "Chelsea",
          "role": "defenders"
        }
      ]
    ],
    [
      "midfielders",
      [
        {
          "id": 156008,
          "name": "Jordan Henderson",
          "ccode": "8650",
          "cname": "Liverpool",
          "role": "midfielders"
        },
        {
          "id": 609755,
          "name": "Kalvin Phillips",
          "ccode": "8463",
          "cname": "Leeds United",
          "role": "midfielders"
        },
        {
          "id": 654096,
          "name": "Declan Rice",
          "ccode": "8654",
          "cname": "West Ham United",
          "role": "midfielders"
        },
        {
          "id": 750032,
          "name": "Mason Mount",
          "ccode": "8455",
          "cname": "Chelsea",
          "role": "midfielders"
        },
        {
          "id": 1077894,
          "name": "Jude Bellingham",
          "ccode": "9789",
          "cname": "Borussia Dortmund",
          "role": "midfielders"
        }
      ]
    ],
    [
      "attackers",
      [
        {
          "id": 194165,
          "name": "Harry Kane",
          "ccode": "8586",
          "cname": "Tottenham Hotspur",
          "role": "attackers"
        },
        {
          "id": 246575,
          "name": "Raheem Sterling",
          "ccode": "8456",
          "cname": "Manchester City",
          "role": "attackers"
        },
        {
          "id": 312765,
          "name": "Jack Grealish",
          "ccode": "10252",
          "cname": "Aston Villa",
          "role": "attackers"
        },
        {
          "id": 612150,
          "name": "Dominic Calvert-Lewin",
          "ccode": "8668",
          "cname": "Everton",
          "role": "attackers"
        },
        {
          "id": 696365,
          "name": "Marcus Rashford",
          "ccode": "10260",
          "cname": "Manchester United",
          "role": "attackers"
        },
        {
          "id": 815006,
          "name": "Phil Foden",
          "ccode": "8456",
          "cname": "Manchester City",
          "role": "attackers"
        },
        {
          "id": 846381,
          "name": "Jadon Sancho",
          "ccode": "9789",
          "cname": "Borussia Dortmund",
          "role": "attackers"
        },
        {
          "id": 961995,
          "name": "Bukayo Saka",
          "ccode": "9825",
          "cname": "Arsenal",
          "role": "attackers"
        }
      ]
    ]
  ]
}

【问题讨论】:

  • 看看这个,jsonschema2pojo.org
  • @AjithkumarMuthukumaran 感谢您的快速回复,但我已经尝试过了,它只返回空白对话框
  • 不要按照向下滚动的说明进行复制和粘贴!

标签: java android android-studio pojo jsonschema2pojo


【解决方案1】:

为 json 模式创建 Java POJO 时,您只需映射字段。对于您的问题,我们可以这样做。

public class SquadDto{
    List<Squad> squads;
}

public class Squad{
    List<Coach> coach;
    List<Goalkeeper> goalkeepers;
    List<Defender> defenders;
    List<Midfielder> midfielders;
    List<Attacker> attackers;
}
public class Coach{
    long id;
    String name;
    String ccode;
    String cname;
    String role;
}

类似地,我们可以为 GoalKeeper 创建类,...,以便它们映射 JSON 中的字段。

【讨论】:

    【解决方案2】:

    1-熟悉数组和对象 2-关于json格式的知识 3- 如果一个数组将它保存在一个集合中,并且对象将成为该集合的一部分。

    4- https://www.jsonschema2pojo.org/ 链接可能会在初期帮助您

    【讨论】:

      【解决方案3】:

      如果您知道您收到的 JSON 文件的格式总是正确的,那么您可以使用上面 Karamveer 的回复。

      如果没有,只需使用 Jackson、Gson、json-io 或 Genson 之类的东西来解析您收到的 JSON 文件。

      然后您可以使用 JavaPoet 生成具有给定 JSON 值的类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-31
        • 1970-01-01
        • 2018-08-04
        • 1970-01-01
        • 2019-10-25
        • 2017-08-06
        • 1970-01-01
        相关资源
        最近更新 更多