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

来源:互联网 发布:淘宝私人定制怎么设置 编辑:程序博客网 时间:2024/06/08 23:34

使用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
原创粉丝点击