从 JSON 生成 Java 类?

2022-08-31 05:39:34

在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开发人员,我需要在我的XML中编写哪些行才能实现这一目标?pom.xml


答案 1

试用 http://www.jsonschema2pojo.org

或者 maven 的 jsonschema2pojo 插件:

<plugin>
    <groupId>org.jsonschema2pojo</groupId>
    <artifactId>jsonschema2pojo-maven-plugin</artifactId>
    <version>1.0.2</version>
    <configuration>
        <sourceDirectory>${basedir}/src/main/resources/schemas</sourceDirectory>
        <targetPackage>com.myproject.jsonschemas</targetPackage>
        <sourceType>json</sourceType>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
</plugin>

它涵盖了源是json的情况(如OP)。如果您有实际的 json 架构,请删除此行。<sourceType>json</sourceType>

2014年更新:自2009年12月提出这个问题以来,发生了两件事:

  • JSON 架构规范已经取得了很大进展。它仍处于草稿中(未最终确定),但它已接近完成,现在是指定结构规则的可行工具。

  • 我最近启动了一个新的开源项目,专门用于解决您的问题:jsonschema2pojo。jsonschema2pojo 工具采用 json 模式文档并生成 DTO 样式的 Java 类(以.java源文件的形式)。该项目尚未成熟,但已经涵盖了json架构中最有用的部分。我正在寻找来自用户的更多反馈,以帮助推动开发。现在,您可以从命令行或作为Maven插件使用该工具。

希望这有帮助!


答案 2

如果您使用的是 Jackson(那里最受欢迎的库),请尝试

https://github.com/astav/JsonToJava

它的开源(截至2021年6月7日最后更新)和任何人都应该能够做出贡献。

总结

一个 JsonToJava 源类文件生成器,它根据提供的示例 json 数据推断架构并生成必要的 Java 数据结构。

它鼓励团队在编写实际代码之前先用 Json 进行思考。

特征

  • 可以为任意复杂的层次结构生成类(递归)
  • 可以读取您现有的Java类,如果它可以反序列化为这些结构,将这样做
  • 当存在不明确的情况时,将提示用户输入