在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行才能实现这一点?


当前回答

如果你正在使用Jackson(那里最受欢迎的库),试试吧

https://github.com/astav/JsonToJava

它是开源的(最后更新于2013年6月7日至2021年),任何人都可以贡献。

总结

JsonToJava源类文件生成器,它根据提供的示例json数据推导模式并生成必要的java数据结构。

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

特性

可以为任意复杂的层次结构生成类(递归地) 是否可以读取现有的Java类,如果可以反序列化为这些结构,是否会这样做 当存在模棱两可的情况时,是否会提示用户输入

其他回答

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

https://github.com/BrunoAlexandreMendesMartins/CleverModels

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

欢迎投稿!

添加到@japher的帖子。如果您不是特别依赖于JSON,那么Protocol Buffers值得一试。

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

你也可以试试GSON库。它非常强大,它可以从集合,自定义对象和作品中创建JSON,反之亦然。它是在Apache许可证2.0下发布的,所以你也可以在商业上使用它。

http://code.google.com/p/google-gson/

试试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>

<sourceType>json</sourceType>涵盖了源是json的情况(如OP)。如果您有实际的json模式,请删除这一行。

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

The JSON Schema spec has moved on a lot. It's still in draft (not finalised) but it's close to completion and is now a viable tool specifying your structural rules I've recently started a new open source project specifically intended to solve your problem: jsonschema2pojo. The jsonschema2pojo tool takes a json schema document and generates DTO-style Java classes (in the form of .java source files). The project is not yet mature but already provides coverage of the most useful parts of json schema. I'm looking for more feedback from users to help drive the development. Right now you can use the tool from the command line or as a Maven plugin.