在Java Maven项目中,如何从JSON生成Java源文件?例如,我们有

{
  "firstName": "John",  
  "lastName": "Smith",  
  "address": {  
    "streetAddress": "21 2nd Street",  
     "city": "New York"
  }
}

当我们运行mvn generate-sources时,我们希望它生成这样的东西:

class Address  {
    JSONObject mInternalJSONObject;
     
    Address (JSONObject json){
        mInternalJSONObject = json;
    }
     
    String  getStreetAddress () {
        return mInternalJSONObject.getString("streetAddress");
    }
    
    String  getCity (){
        return mInternalJSONObject.getString("city");
    }
}

class Person {        
    JSONObject mInternalJSONObject;
    
    Person (JSONObject json){
        mInternalJSONObject = json;
    }
    
    String  getFirstName () {
        return mInternalJSONObject.getString("firstName");
    }
    
    String  getLastName (){
        return mInternalJSONObject.getString("lastName");
    }
    
    Address getAddress (){
        return Address(mInternalJSONObject.getString("address"));
    }
}

作为Java开发人员,我需要在pom.xml中编写哪些XML行才能实现这一点?


当前回答

用最近的项目回答这个老问题;-)。

目前最好的解决方案可能是JsonSchema2Pojo:

它从很少使用的Json Schema中完成这项工作,但也可以使用纯Json。它提供了Ant和Maven插件,一个在线测试应用程序可以让你对这个工具有一个概念。我放了一个Json Tweet,并生成了所有包含类(Tweet,用户,位置等)。

我们将在Agorava项目中使用它来生成社交媒体映射,并遵循API的不断进化。

其他回答

谢谢所有想帮忙的人。对我来说,这个脚本很有帮助。它只处理普通JSON,不关心类型,而是自动执行一些例程

  String str = 
        "{"
            + "'title': 'Computing and Information systems',"
            + "'id' : 1,"
            + "'children' : 'true',"
            + "'groups' : [{"
                + "'title' : 'Level one CIS',"
                + "'id' : 2,"
                + "'children' : 'true',"
                + "'groups' : [{"
                    + "'title' : 'Intro To Computing and Internet',"
                    + "'id' : 3,"
                    + "'children': 'false',"
                    + "'groups':[]"
                + "}]" 
            + "}]"
        + "}";



    JSONObject json = new JSONObject(str);
    Iterator<String> iterator =  json.keys();

    System.out.println("Fields:");
    while (iterator.hasNext() ){
       System.out.println(String.format("public String %s;", iterator.next()));
    }

    System.out.println("public void Parse (String str){");
    System.out.println("JSONObject json = new JSONObject(str);");

    iterator  = json.keys();
    while (iterator.hasNext() ){
       String key = iterator.next();
       System.out.println(String.format("this.%s = json.getString(\"%s\");",key,key ));

    System.out.println("}");

我知道这是一个老问题,但我是在自己试图寻找答案的时候偶然发现的。

答案中提到了在线json-pojo生成器(jsongen),这很好,但我需要一些可以在命令行上运行并进行更多调整的东西。

因此,我编写了一个非常粗糙的ruby脚本来获取一个示例JSON文件并从中生成pojo。它有许多限制(例如,它不处理与java保留关键字匹配的字段),但在许多情况下它已经足够了。

默认情况下,生成的代码对Jackson进行注释,但可以通过开关关闭。

你可以在github上找到代码:https://github.com/wotifgroup/json2pojo

这里有一个在线工具,它将接受JSON,包括嵌套对象或嵌套对象数组,并生成带有Jackson注释的Java源代码。

用最近的项目回答这个老问题;-)。

目前最好的解决方案可能是JsonSchema2Pojo:

它从很少使用的Json Schema中完成这项工作,但也可以使用纯Json。它提供了Ant和Maven插件,一个在线测试应用程序可以让你对这个工具有一个概念。我放了一个Json Tweet,并生成了所有包含类(Tweet,用户,位置等)。

我们将在Agorava项目中使用它来生成社交媒体映射,并遵循API的不断进化。

我也有同样的问题,所以我决定开始写一个小工具来帮助我解决这个问题。我要分享并开源它。

https://github.com/BrunoAlexandreMendesMartins/CleverModels

它支持,JAVA, c#和Objective-c从JSON。

欢迎投稿!