从JSON生成Java类?

Den*_*sky 204 java json

我想要一个从JSON生成java源文件的实用程序.比如我们有

{
  "firstName": "John",  
  "lastName": "Smith",  
  "address": {  
    "streetAddress": "21 2nd Street",  
     "city": "New York"
  }
}
Run Code Online (Sandbox Code Playgroud)

我们将它传递给实用程序,我们希望它生成这样的东西:

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"));
    }
}
Run Code Online (Sandbox Code Playgroud)

写起来并不难,但我确信有人已经这样做了.

joe*_*ohn 258

尝试:

http://www.jsonschema2pojo.org

Orsol,我相信你还没有在这里等待解决方案,但为了找到这个帖子的下一个人,我想我会添加更多信息.

自2009年12月问及此问题以来,发生了两件事情:

  • JSON模式规范已经转移了很多.它仍在草案中(尚未最终确定),但它已接近完成,现在是一个可行的工具,用于指定您的结构规则

  • 我最近开始了一个新的开源项目,专门用于解决您的问题:jsonschema2pojo.jsonschema2pojo工具获取json模式文档并生成DTO样式的Java类(以.java源文件的形式).该项目尚未成熟,但已经提供了对json模式最有用部分的报道.我正在寻求用户的更多反馈,以帮助推动开发.现在,您可以使用命令行中的工具或Maven插件.

希望这可以帮助!

  • ......现在还有一个在线生成器:http://jsonschema2pojo.org (14认同)
  • 使用jsonschema2pojo工具的人不会写自己的架构文件吗?OP要求从一个Json文件开始,而不是一个模式.有没有一个配套工具可以从Json - > Schema?我认为这样一个工具,如果它存在,只能提供一个猜测. (4认同)
  • 从版本0.3.3开始,您可以使用普通的旧JSON作为输入:) (3认同)
  • 优秀的工具.提供的链接包含一个在线工具,您可以在其中粘贴示例JSON,单击按钮并获取Java源代码. (2认同)

小智 20

如果您正在使用杰克逊(那里最受欢迎的图书馆),请尝试

https://github.com/astav/JsonToJava

它的开源和任何人都应该能够贡献.

摘要

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

在编写实际代码之前,它鼓励团队先在Json中思考.

特征

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


Tim*_*eau 12

这是一个将采用JSON 的在线工具,包括嵌套对象或嵌套的对象数组,并使用Jackson注释生成Java源代码.

  • 这对我来说非常有效。我有深度嵌套的 JSON 并且它工作得很好,尽管我确实必须修剪多余的部分才能使整体大小低于 2k。让我能够编写:MyClass c = new MyClass(); c = gson.fromJson(c.getHTML(someURLthatReturnsJSON), MyClass.class); 结果数据完美流动。我必须删除所有杰克逊符号,但除此之外它对 gson 来说效果很好。谢谢。 (2认同)

Ant*_*and 6

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

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

它很少使用Json Schema,也可以使用普通的Json.它提供了Ant和Maven插件,在线测试应用程序可以让您了解该工具.我放了一个Json Tweet并生成了所有包含的类(Tweet,User,Location等).

我们将在Agorava项目中使用它来生成社交媒体映射,并跟踪其API中的不断演变.


Den*_*sky 5

感谢所有试图提供帮助的人。
对我来说,这个脚本很有帮助。它只处理平面 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("}");
Run Code Online (Sandbox Code Playgroud)


小智 5

我知道这是一个老问题,但我在试图找到答案时偶然发现了它.

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

所以我编写了一个非常hacky的ruby脚本来获取示例JSON文件并从中生成POJO.它有许多限制(例如,它不处理与java保留关键字匹配的字段),但它在很多情况下都足够了.

默认情况下,生成的代码注释用于Jackson,但可以通过开关关闭.

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