如果类不可用,是否可以将json转换为java类对象

时间:2016-08-11 11:35:47

标签: java json eclipse-plugin

这个Json

{
    "age":"23",
    "name":"srinivas",
    "blog":"A",
    "messages":["msg1","msg2","msg3"] 
}

我想将json转换为java类,如此类和类使用:

public class A
{
    private String name;

    private String age;

    private String blog;

    private String[] messages;

    public String getName ()
    {
        return name;
    }

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

    public String getAge ()
    {
        return age;
    }

    public void setAge (String age)
    {
        this.age = age;
    }

    public String getBlog ()
    {
        return blog;
    }

    public void setBlog (String blog)
    {
        this.blog = blog;
    }

}

2 个答案:

答案 0 :(得分:0)

没有。你不能从你的json自动为你创建类。

然而,您可能需要以下相关内容:

您需要link

摘自链接,下面是示例代码:

String carJson =
        "{ \"brand\" : \"Mercedes\", \"doors\" : 5," +
        "  \"owners\" : [\"John\", \"Jack\", \"Jill\"]," +
        "  \"nestedObject\" : { \"field\" : \"value\" } }";

ObjectMapper objectMapper = new ObjectMapper();


try {

    JsonNode node = objectMapper.readValue(carJson, JsonNode.class);

    JsonNode brandNode = node.get("brand");
    String brand = brandNode.asText();
    System.out.println("brand = " + brand);

    JsonNode doorsNode = node.get("doors");
    int doors = doorsNode.asInt();
    System.out.println("doors = " + doors);

    JsonNode array = node.get("owners");
    JsonNode jsonNode = array.get(0);
    String john = jsonNode.asText();
    System.out.println("john  = " + john);

    JsonNode child = node.get("nestedObject");
    JsonNode childField = child.get("field");
    String field = childField.asText();
    System.out.println("field = " + field);

} catch (IOException e) {
    e.printStackTrace();
}

答案 1 :(得分:0)

技术上可以在运行时创建一个类:请参阅How to create a class dynamically in javaCreating classes dynamically with Java。但是,如果您的代码想以某种方式使用A,则需要在编译期间使用它。如果您的代码不需要使用A,为什么要创建它?您可以在编译期间实现某些接口/扩展 可用的类,但在您的情况下,没有合理的通用接口,您只能使用反射访问它。

更合理的替代方法是在构建过程中从已知的JSON示例(或更好地,从某些模式描述)生成类。同样,有很多方法可以做到这一点,你应该寻找一个符合你需求的方法。