你所拥有的players
是一个Map
表示为 JSON 数组。
这是一张丑陋的地图,但它仍然是Map
. 键是List<String>
(IP 和端口),值为 a String
(“id”)
几乎就像编写服务器的人犯了一个错误并且倒退了一样,特别是考虑到您对这应该是什么的描述。它真的应该看起来像:
["id_1",[["192.168.1.0","8888"], [另一个 ip/端口], ... ]
对于每个条目。这会更有意义,因为 ( String
) “id” 是键和List<List<String>>
值。
这仍然很难看,因为他们真的应该使用对象来表示 IP/端口。理想情况下,您会想要:
["id_1",[{"ip":"192.168.1.1", "port":"8888"},{ "ip":"192.168.1.2","port":"8889"}]]
下面演示了它当前的编写方式:
public static void main( String[] args )
{
String json = "{\"players\":[[[\"192.168.1.0\",\"8888\"],\"id_1\"],[[\"192.168.1.1\",\"9999\"],\"id_2\"]],\"result\":\"ok\"}";
Gson gson = new GsonBuilder().create();
MyClass c = gson.fromJson(json, MyClass.class);
c.listPlayers();
}
class MyClass
{
public String result;
public Map<List<String>, String> players;
public void listPlayers()
{
for (Map.Entry<List<String>, String> e : players.entrySet())
{
System.out.println(e.getValue());
for (String s : e.getKey())
{
System.out.println(s);
}
}
}
}
输出:
id_1
192.168.1.0
8888
id_2
192.168.1.1
9999
您可以通过以下方式获得一些创意并使地图的密钥更有用:
class IpAndPort extends ArrayList<String> {
public String getIp() {
return this.get(0);
}
public String getPort() {
return this.get(1);
}
}
然后改变:
public Map<List<String>, String> players;
到:
public Map<IpAndPort, String> players;
在MyClass