json生成java实体类

黑白
  • 136

最近遇到了一个问题如何将一个json 字符串转换为javabean 的类
场景: 我有一个接口文档其中的响应都采用json 格式,我需要将json 转换为javabean 代码
image.png
我需要转为java 代码

/**
  * Copyright 2021 bejson.com 
  */
package com.bejson.pojo;

/**
 * Auto-generated: 2021-10-07 14:44:31
 *
 * @author bejson.com (i@bejson.com)
 * @website http://www.bejson.com/java2pojo/
 */
public class JsonRootBean {

    private String total;
    private String subjectName;
    private String subjectId;
    private String firstName;
    private String firstPhone;
    private String firstTitle;
    private String secondName;
    private String secondPhone;
    private String secodTitle;
    private String studentName;
    private String studentPhone;
    private String studentNumber;
    private String progress;
    private String fillingNumber;
    public void setTotal(String total) {
         this.total = total;
     }
     public String getTotal() {
         return total;
     }

    public void setSubjectName(String subjectName) {
         this.subjectName = subjectName;
     }
     public String getSubjectName() {
         return subjectName;
     }

    public void setSubjectId(String subjectId) {
         this.subjectId = subjectId;
     }
     public String getSubjectId() {
         return subjectId;
     }

    public void setFirstName(String firstName) {
         this.firstName = firstName;
     }
     public String getFirstName() {
         return firstName;
     }

    public void setFirstPhone(String firstPhone) {
         this.firstPhone = firstPhone;
     }
     public String getFirstPhone() {
         return firstPhone;
     }

    public void setFirstTitle(String firstTitle) {
         this.firstTitle = firstTitle;
     }
     public String getFirstTitle() {
         return firstTitle;
     }

    public void setSecondName(String secondName) {
         this.secondName = secondName;
     }
     public String getSecondName() {
         return secondName;
     }

    public void setSecondPhone(String secondPhone) {
         this.secondPhone = secondPhone;
     }
     public String getSecondPhone() {
         return secondPhone;
     }

    public void setSecodTitle(String secodTitle) {
         this.secodTitle = secodTitle;
     }
     public String getSecodTitle() {
         return secodTitle;
     }

    public void setStudentName(String studentName) {
         this.studentName = studentName;
     }
     public String getStudentName() {
         return studentName;
     }

    public void setStudentPhone(String studentPhone) {
         this.studentPhone = studentPhone;
     }
     public String getStudentPhone() {
         return studentPhone;
     }

    public void setStudentNumber(String studentNumber) {
         this.studentNumber = studentNumber;
     }
     public String getStudentNumber() {
         return studentNumber;
     }

    public void setProgress(String progress) {
         this.progress = progress;
     }
     public String getProgress() {
         return progress;
     }

    public void setFillingNumber(String fillingNumber) {
         this.fillingNumber = fillingNumber;
     }
     public String getFillingNumber() {
         return fillingNumber;
     }

}

由于有很多这种类似的json 需要转换为Java 代码,一个个手写效率太慢,我查了一下有些在线json转换工具但是他们只能一个一个转换,效率比较低,请问有效率更高的方式吗?还想问一下这种转换如何用代码实现

回复
阅读 562
3 个回答

确实如评论所说,自己手写一个不是很难的,可能题主没有接触过类似的编码方式,因为这里不是写代码了,是要写出写代码的代码。有点套娃的感觉,哈哈哈。

而这主要是元编程的范畴(但是元编程没有限制能写代码的代码的类型,但是由于我涉猎的局限性,我下面单只从Java生成Java源文件的角度说)

由于Java最终能够运行是需要有一个编译过程的,也就是

graph TD
    A[源文件] --> B(字节码)

所以我们能做的元编程操作可以根据需要在这两种形式中去选择实现,也就是:

  • 我们可以用Java生成Java源文件,再将源文件与其他项目打包编译
  • 我们也可以在运行时绕过源文件,直接生成字节码

那上面两种对应了不同的库,简单小推荐一下我之前用过的

生成源文件:

javapoet

image.png

生成字节码:

javassist

image.png

byte-buddy

image.png

如果对性能有很大要求,还是建议用ASM,这个更偏底层,不过这个就需要用JVM的汇编语言来操作,学习难度比较大,我自己也没有碰过(掩面)

最后我简单用源文件(javapoet)的方式举例一下,如何根据一个json数据生成源文件。

代码地址

一个能写了,批量那就相对容易了~

image.png

差不多就这样叭,欢迎大家讨论~╰( ̄▽ ̄)╭

实际上也只能一个一个转换……
因为用json转换出来的东西只有字段列表没有类名,需要一个一个加类名
而且一些嵌套的情况也很难处理

从数据库生成javabean ,你可以参考这个
若依官网,开源
http://ruoyi.vip/
image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏