GSON:将JSON数据输入到Java类中,该类的类名存储在字符串中
我正在使用Google的库将JSON数据转换为Java对象。问题是Java对象的类名也在JSON数据中传递,因此它只能作为字符串使用。我对Java不太熟悉,所以我不明白当类名存储为字符串时如何声明对象 同样,我将在数据初始化后调用的方法也是如此 以下是到目前为止的相关代码:GSON:将JSON数据输入到Java类中,该类的类名存储在字符串中,java,json,gson,Java,Json,Gson,我正在使用Google的库将JSON数据转换为Java对象。问题是Java对象的类名也在JSON数据中传递,因此它只能作为字符串使用。我对Java不太熟悉,所以我不明白当类名存储为字符串时如何声明对象 同样,我将在数据初始化后调用的方法也是如此 以下是到目前为止的相关代码: request = gson.fromJson( rawData.toString(), JSONRequest.class ); String method = request.getMethod(); String d
request = gson.fromJson( rawData.toString(), JSONRequest.class );
String method = request.getMethod();
String data = request.getData();
String dataClass = request.getDataClass();
// convert data into an object of dataClass and execute method by passing dataObject
dataClass dataObject = gson.fromJson( data, dataClass.class );
result = method( dataObject );
这似乎是完成数据到对象转换的一种非常粗糙的方法。有更好的办法吗?如果没有,我如何修复代码?使用原始问题中的示例代码,dataClass.class将始终是String.class,我怀疑这是要反序列化的正确目标类型 我认为以下是打算演示的内容。(我不确定在最初的问题中使用了什么样的JSONRequest实现。我将补充一个。) 如果目标类型确实是未知的,并且它不是某个已知父类型的子类型,那么调用该方法将需要反射。(这假设目标方法不需要任何参数。) 这似乎是完成数据到对象转换的一种非常粗糙的方法。有更好的办法吗 如果要调用的目标数据类型和方法都是完全未知的,并且只在传入的JSON中提供,那么这就足够了
import java.io.FileReader;
import java.lang.reflect.Method;
import com.google.gson.Gson;
public class Foo
{
public static void main(String[] args) throws Exception
{
Gson gson = new Gson();
// input JSON:
// {
// "dataClass":"com.stackoverflow.q6647866.MyObject",
// "method":"myMethod",
// "data":"{\"name\":\"fubar\"}"
// }
JSONRequest request = gson.fromJson(new FileReader("input.json"), JSONRequest.class);
Class targetClass = Class.forName(request.dataClass);
System.out.println("targetClass: " + targetClass);
Object dataObject = gson.fromJson(request.data, targetClass);
Method method = targetClass.getMethod(request.method);
method.invoke(dataObject);
}
}
class JSONRequest
{
String method;
String data;
String dataClass;
}
class MyObject
{
String name;
public void myMethod()
{
System.out.println("running my method...");
}
}