有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

json使用正确的数据值自动创建新的Java对象

我想知道Java中是否有这样一种方法可以从一个简单的POJO自动创建一个具有正确数据值的对象

假设我有一个简单的POJO,如下所示:

public class POJO {

    private int intVar;
    private boolean booleanVar;
    private String stringVar;

    public POJO(int intVar, boolean booleanVar, String stringVar) {
        this.intVar = intVar;
        this.booleanVar = booleanVar;
        this.stringVar = stringVar;     
    }

    //Geteru & Setteru...   
}

所以基本上我想知道我能不能从这个类中创建一个对象,用一些sorta方法或者一些东西来读取变量和它们的类型,并给它们赋值,但是这个值对于变量数据类型是正确的。例如,intVar当然应该得到一个整数,stringVar应该得到一个字符串,等等

这不一定是实现这一点的方法,我实际上试图实现的是,我试图自动创建我拥有的这些POJO的JSON,但问题是我需要JSON的一些值。我已经使用gson创建了POJO的JSON,但我不知道如何为变量自动分配“正确”的值。不必通过创建新对象来实现,我所需要的只是获得一个JSON,其中包含从任何POJO创建的变量值,如下所示

例如:

{
     intVar=1,
     booleanVar=true,
     stringVar="my string"
}

我想问的是,我是否可以从这样一个简单的POJO中自动创建一个新对象,并为变量创建正确的值,原因是这样我就可以从中创建令人满意的JSON,但是如果有人知道将值获取到JSON的其他解决方案,请随意推荐:)


共 (3) 个答案

  1. # 1 楼答案

    依我看,你需要试试杰克逊或格森图书馆。根据我的经验,杰克逊更好

    我不能为实现编写100%的工作方式,因为根据我的经验,我从未做过同样的事情。我总是将JSON格式的数据转换成已知的类(在spring控制器中,它作为映射对象作为参数)。不知道,为什么需要映射抽象类,可能是设计错误,也可能不是

    使用jackson,您将能够使用继承: http://www.baeldung.com/jackson-inheritance,但我以前从未尝试过

    如果它不能满足您的需要,您可以使用:

    Class[] candidates = new Class[]{InheritedClass1.class, InheritedClass2.class, InheritedClass3.class};
    ObjectMapper mapper = new ObjectMapper();
    String jsonInString = "{\"your\":\"json\"}";
    AbstractClass instance = null;
    for(Class clazz : candidates) {
        try{
            instance = mapper.readValue(jsonInString, clazz);
        } catch (Exception e){
        }
        if(instance !== null) {
            break;
        }
    }
    System.out.println(instance);
    
  2. # 2 楼答案

    尝试对模型实现可序列化。 然后,如果希望使用@SeriliazedName(“stringVar”)来更改json属性名称

    有一个例子:

    public class POJO implements Serializable{
    
    @SerializedName("intVar")
    private int intVar ;
    @SerializedName("stringVar")
    private String stringVar;
    
  3. # 3 楼答案

    如果类只有原语和字符串(如示例中所示),则可以使用默认构造函数。字段将使用相应数据类型的默认值初始化:

    public class Pojo {
        int intVar;
        boolean booleanVar;
        String stringVar;
    }
    
    Pojo pojo = new Pojo();
    // pojo.intVar is now 0
    // pojo.booleanVar is now false
    // pojo.string Var is now ""