我有一个 NodeJS WebSocket 服务器,需要在其中创建一个 Java 客户端应用程序,但是我过去没有在 Java 中使用过 JSON,并且在理解如何为该服务器创建类实例时遇到了一些问题。根据type
正确的数据包Json 对象中的值。
为了让您有更多的了解,我们有 Packet
抽象类,然后是子类,例如 AuthenticationPacket
。我们有一个Map<>
存储类,Map<String, Class>
因此,示例条目为 ("Authentication success", AuthenticationPacket.class)
这是我们从服务器返回的 JSON 数据的示例。
{
"type": "Authentication success",
"data":
{
"username": "Hobbyist",
"accountStatus": "USER"
}
}
所以我的问题是如何从 data
中的变量创建一个新类JSON 响应的字段,而无需根据带有 new AuthenticationPacket(...)
的类型一次传入每个参数
有没有办法在 JSON 和类之间进行某种链接,它只是使用 data
中存在的所有变量创建该类的新实例。 ?
谢谢
最佳答案
希望我没有误解你的意思。
如果你可以将json字符串转换为JSONObject(我使用的是vert.x JsonObject)
PacketSErvice 处理所有请求
public class PacketService {
private static PacketService instance;
private PacketService(){}
public static PacketService newInstance(){
if(instance == null) {
instance = new PacketService();
}
return instance;
}
public <T extends Packet> T handlePacket(Class<T> clazz, JSONObject data){
return (T) clazz.newInstance().fromJson(data);
}
}
数据包接口(interface)
public interface Packet {
Packet fromJson(JSONObject object);
JSONObject asJson();
}
如果您有类 XPacket 、 YPacket 、 ZPacket ,请实现您的请求
Xpacket packet = PacketService.newInstance().handlePacket(XPacket.class,jsonData);
关于java - 从 JSON 对象实例化一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46460317/