加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

使用Groovy把json字符串转成Java代码

发布时间:2020-12-14 16:47:34 所属栏目:大数据 来源:网络整理
导读:使用Groovy把json字符串转成Java代码 最近项目里面的通信接口都是json,所以安卓客户端这边需要写很多的Java bean,很多的时候,Java bean都是可以自动生成的,但是有的不能满足自己的需要,所以我就用Groovy来实现了。 至于为什么用Groovy,因为Groovy是基

使用Groovy把json字符串转成Java代码

最近项目里面的通信接口都是json,所以安卓客户端这边需要写很多的Java bean,很多的时候,Java bean都是可以自动生成的,但是有的不能满足自己的需要,所以我就用Groovy来实现了。
至于为什么用Groovy,因为Groovy是基于JVM的脚本语言,和Java很像,最重要的时,它能兼容Java代码。
比如下的Json

{
    "cityId": 18,"cityName": "西安","provinceId": 27,"cityOrder": 1 }

我们在写Java Bean的时候如下

public class CityInfo{

    @SerializedName("cityId")
    public String cityId; // 18,

    @SerializedName("cityName")
    public String cityName; // 西安,

    @SerializedName("provinceId")
    public String provinceId; // 27,

    @SerializedName("cityOrder")
    public String cityOrder; // 1

    // setter / getter

}

下面是Groovy的简单实现,还是只是简单的生成一些代码,后面考虑实现复制点的。

def jsonSb = new StringBuffer()
new File("json.txt").eachLine {
    jsonSb.append(it.trim() + "n")
}

def jsonStr = jsonSb.replaceAll(""","").replaceAll("“","").replaceAll("”","").replaceAll(":","; // ")

def targetSb = new StringBuffer()

jsonStr.split("n").each { line ->
    if (line == null || line.trim().length() == 0) {
        return
    }
    strArray = line.split(";")
    if (strArray == null || strArray.length < 2) {
        targetSb.append(line + "n")
        return
    }
    def (first,last) = strArray
    if (((String) first).contains("_")) {

        String firstStr = first;
        def rename = new StringBuffer();
        boolean isLastUnline = false;
        for (int i = 0; i < firstStr.length(); i++) {
            char c = firstStr.charAt(i)
            if (c == '_') {
                isLastUnline = true
                continue
            }
            if (isLastUnline) {
                rename.append(c.toUpperCase())
                isLastUnline = false
            } else {
                rename.append(c)
            }
        }

        targetSb.append("nt@SerializedName("$first")n")
        targetSb.append("tpublic String $rename;$lastn")
    } else {
        targetSb.append("nt@SerializedName("$first")n")
        targetSb.append("tpublic String $linen")
    }
}

println()

println targetSb

运行结果如下

@SerializedName("cityId")
public String cityId; // 18,

@SerializedName("cityName")
public String cityName; // 西安,

@SerializedName("provinceId")
public String provinceId; // 27,

@SerializedName("cityOrder")
public String cityOrder; // 1

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读