简体   繁体   中英

Java JSONObjects Looping in JSONArray

I need an output JSON like this:

{
    "id": 171799578198,
    "name": "Forum Striking",
    "players": [
        {
          "avatar": {
            "userId": 21393,
            "currentHomeId": 21393,
            "clanId": 171799578198
          }
        },
        {
          "avatar": {
            "userId": 64425223942,
            "currentHomeId": 64425223942,
            "clanId": 171799578198
          }
        },
        {
          "avatar": {
            "userId": 17180463537,
            "currentHomeId": 17180463537,
            "clanId": 171799578198
          }
        }
    ]
}

The values in each "avatar": part will be gotten through a loop. How would I go about forming this sort of JSON?

I have the first bit:

{
  "id": 171799578198,
  "name": "Forum Striking"
}

But I am not sure what I need to do to get the list of players.

I am using the Java-JSON library.

You should create a Game, a Player and an Avatar objects. Game must have a Player list and Player has an Avatar object.

Fill your game objects and convert it to Json via new Gson().toJson(game) as at the below.

Gson is a Json library(Google's Project) that makes developers life easier while working with Json;)

public static void main(String[] args) throws IOException {

    Game game = new Game();
    game.setId(171799578198L);
    game.setName("Forum Striking");

    Avatar avatar = new Avatar();
    avatar.setUserId(21393L);
    avatar.setClanId(171799578198L);
    avatar.setCurrentHomeId(21393L);

    Player player = new Player();
    player.setAvatar(avatar);
    game.addPlayers(player);

    avatar = new Avatar();
    avatar.setUserId(64425223942L);
    avatar.setClanId(171799578198L);
    avatar.setCurrentHomeId(64425223942L);

    player = new Player();
    player.setAvatar(avatar);
    game.addPlayers(player);

    System.out.println(new Gson().toJson(game));
}

It prints:

{
  "id": 171799578198,
  "name": "Forum Striking",
  "players": [
    {
      "avatar": {
        "userId": 21393,
        "currentHomeId": 21393,
        "clanId": 171799578198
      }
    },
    {
      "avatar": {
        "userId": 64425223942,
        "currentHomeId": 64425223942,
        "clanId": 171799578198
      }
    }
  ]
}

Game object,

public class Game {

    private Long id;
    private String name;
    private List<Player> players;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Player> getPlayers() {
        return players;
    }

    public List<Player> addPlayers(Player player) {
        if (getPlayers() == null)
            setPlayers(new ArrayList<Player>());
        players.add(player);
        return players;
    }

    public void setPlayers(List<Player> players) {
        this.players = players;
    }
}

Player object,

public class Player {
    private Avatar avatar;

    public Avatar getAvatar() {
        return avatar;
    }

    public void setAvatar(Avatar avatar) {
        this.avatar = avatar;
    }
}

Avatar object

public class Avatar {
    private Long userId;
    private Long currentHomeId;
    private Long clanId;

    public Long getUserId() {
        return userId;
    }
    public void setUserId(Long userId) {
        this.userId = userId;
    }
    public Long getCurrentHomeId() {
        return currentHomeId;
    }
    public void setCurrentHomeId(Long currentHomeId) {
        this.currentHomeId = currentHomeId;
    }
    public Long getClanId() {
        return clanId;
    }
    public void setClanId(Long clanId) {
        this.clanId = clanId;
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM