如何从 json 源文件自动生成 Java 代码

场景

在 Restful 服务中返回 Json 内容。消费端需要定义对应的 Java 类,以便直接将返回的数据转换为 Java 类。手工编写 Java 类完全是一个体力活,费事费力,容易出错。

例如, Elastic Search Low Level API 返回的 Json。 在 Kibana 后台访问 ES 返回的格式即是 Low Level API返回的 JSON。 为什么不自动生成 Java Bean 类代码呢?

 

方案

1.使用 jsonschema2pojo 命令行.

https://github.com/joelittlejohn/jsonschema2pojo/wiki/Getting-Started#the-command-line-interface

 

从这里下载:

https://github.com/joelittlejohn/jsonschema2pojo/releases

 

用法:

在解压包的 bin 目录, 创建 link

 

ln -s /Users/xxx/workspace/jsonschema2pojo-1.1.1/bin/jsonschema2pojo /usr/local/bin/jsonschema2pojo

 

下载示例的 address.schema.json 文件, 运行示例命令:

./jsonschema2pojo --source address.schema.json --target java-gen

 

指定 Elastic Search JSON 格式文件输入,生成需要 的 Java 类定义:

jsonschema2pojo -T json --source es.schema.json --target java

 

2.Online 工具

https://www.freecodeformat.com/json2pojo.php

https://codebeautify.org/json-to-java-converter

 

3.使用场景 - 处理 ElasticSearch的 JSON 返回结果

处理 Elastic Search 返回的 Json 格式内容。

 

ElasticSearch  返回的 Json 内容

{
  "took" : 113,
  "timed_out" : false,
  "_shards" : {
    "total" : 10,
    "successful" : 9,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 16.761106,
    "hits" : [
      {
        "_index" : "media",
        "_type" : "doc",
        "_id" : "176",
        "_score" : 16.761106,
        "_source" : {
          "publish_state" : "Published",
          "media_id" : "226bb012c46e1ef4e52b788cf3312345",
          "id" : 176,
          "url" : "http://www.abcd.com/20190317152813791092",
          "owner_id" : 1438747659963495,
          "media_info" : "",
          "description" : null,
          "env" : 1,
          "cover_url" : null,
          "gmt_create" : "2016-03-17T07:29:18.000Z",
          "gmt_modified" : "2016-06-16T06:50:48.000Z",
          "state" : "Normal",
          "title" : "20160317152813791092",
          "tags" : null,
          "@version" : "1",
          "@timestamp" : "2021-04-06T14:36:17.393Z"
        }
      }
    ]
  }
}

把上面的内容保存为 json 文件, 使用步骤1的命令,即可生成对应的 Java 类的定义。 从而可以直接使用 Elastic Search 的 Low Level API 来访问。

参考:

https://stackoverflow.com/questions/1957406/generate-java-class-from-json

你可能感兴趣的:(软件开发,Java,java)