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

使用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("\n\t@SerializedName(\"$first\")\n")
        targetSb.append("\tpublic String $rename;$last\n")
    } else {
        targetSb.append("\n\t@SerializedName(\"$first\")\n")
        targetSb.append("\tpublic String $line\n")
    }
}

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值