从JSON生成Java类?

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

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

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

 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")); } } 

不难写,但我相信有人已经做到了。

尝试:

http://www.jsonschema2pojo.org

Orsol,我确定你还没有在这里等待一个解决scheme,但为了find这个线程的下一个人,我想我会添加一些更多的信息。

自从09年12月问这个问题以来,发生了两件事情:

  • JSON模式规范移动了很多。 它仍然在草稿中(未定稿),但接近完成,现在是一个可行的工具,指定您的结构规则

  • 我最近开始了一个专门用来解决你的问题的新的开源项目: jsonschema2pojo 。 jsonschema2pojo工具接受一个json模式文档并生成DTO风格的Java类(以.java源文件的forms)。 该项目还不成熟,但已经提供了JSON模式最有用的部分的覆盖面。 我正在寻求更多来自用户的反馈,以帮助推动这一发展。 现在,您可以使用命令行中的工具或Maven插件。

希望这可以帮助!

如果您使用的是jackson(那里最受欢迎的图书馆),请尝试

https://github.com/astav/JsonToJava

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

概要

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

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

特征

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

它看起来不像JSON Gen(接受的答案)已经在一段时间内更新了。 不过,http://javafromjson.dashingrocket.com看起来不错;

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

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

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

它从很less使用Json Schema完成工作,但也用普通的Json完成。 它提供了Ant和Maven插件, 在线testing应用程序可以给你一个工具的想法。 我把一个Json Tweet并生成所有包含的类(Tweet,User,Location等)。

我们将在Agorava项目上使用它来生成社交媒体映射,并在其API中遵循共同演变。

感谢所有试图帮助的人。
对我来说这个脚本很有帮助。 它只处理平坦的JSON,不处理types,但自动化一些例程

  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("}"); 

我知道这是一个古老的问题,但我试图自己find答案时偶然发现了这个问题。

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

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

生成的代码,默认情况下,注释用于jackson,但这可以closures一个开关。

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

据我所知,没有这样的工具。 然而。

主要的原因是,我怀疑,与XML不同(它具有XML Schema,然后像xjc这样的工具来执行XML和POJO定义之间的问题),没有完整的function模式语言。 有JSON Schema,但对实际types定义的支持很less(重点放在JSON结构上),因此生成Java类将会非常棘手。 但可能仍然有可能,尤其是。 如果一些命名约定被定义并用于支持生成。

然而:这是一个相当频繁的要求(在我所关注的JSON工具项目的邮件列表上),所以我认为有人会在不久的将来编写这样一个工具。

所以我不认为这本身是一个坏主意(另外:这不是一个好主意的所有用例,取决于你想做什么)。

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

https://github.com/BrunoAlexandreMendesMartins/CleverModels

它支持来自JSON的JAVA,C#和Objective-C。

随意贡献!

我创build了一个github项目Json2Java这样做。 https://github.com/inder123/json2java

Json2Java提供了自定义,比如重命名字段和创buildinheritance层次结构。

我已经使用该工具来创build一些相对复杂的API:

Gracenote的TMS API: https : //github.com/inder123/gracenote-java-api

Google地图地理编码API: https : //github.com/inder123/geocoding

你也可以尝试GSON库。 它相当强大,它可以从集合,自定义对象和作品创buildJSON,反之亦然。 它在Apache许可证2.0下发布,所以你也可以在商业上使用它。

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

让我告诉你如何开发工具。你可以这样做:

  1. 用户的javascript函数Json.parse(),把stringlike-json转换成js对象
  2. 然后使用这个对象来生成javabean格式。
  3. (1)值types映射,例如如何计算出string,是datetypes(2)loweser_case到camelCase

我开发了一个工具来解决这个问题,它的devise和速度都很快。 从我的github获取代码。

从这里享受它,我已经部署在networking服务器上 。

我尝试了最好的2个答案的build议。一个networking是无法打开。一个比我的tool.hope慢,你会喜欢我的工具。

添加到@ japher的post。 如果你不特别绑定到JSON, Protocol Buffers值得一试。

试试我的解决scheme

http://htmlpreview.github.io/?https://raw.githubusercontent.com/foobnix/android-universal-utils/master/json/generator.html

 { "auctionHouse": "sample string 1", "bidDate": "2014-05-30T08:20:38.5426521-04:00 ", "bidPrice": 3, "bidPrice1": 3.1, "isYear":true } 

结果Java类

 private String auctionHouse; private Date bidDate; private int bidPrice; private double bidPrice1; private boolean isYear; 

JSONObject获取

 auctionHouse = obj.getString("auctionHouse"); bidDate = obj.opt("bidDate"); bidPrice = obj.getInt("bidPrice"); bidPrice1 = obj.getDouble("bidPrice1"); isYear = obj.getBoolean("isYear"); 

JSONObject放

 obj.put("auctionHouse",auctionHouse); obj.put("bidDate",bidDate); obj.put("bidPrice",bidPrice); obj.put("bidPrice1",bidPrice1); obj.put("isYear",isYear);