JsonLube

Project Url: alibaba/JsonLube
Introduction: 为了高效地将 Json 对象转化成 Java bean 对象,传统上我们是在运行是利用反射来实现。但是在移动平台上,面对复杂的 Json,采用反射的方式往往性能比较差,为了追求极致的性能,我们可以采用 Android 原生的 Json 库进行解析。但是面对一个复杂的大 Json,基于原生 Json 库去手动解析工作量太大,且容易出错。JsonLube 是为此而设计的。JsonLube 会在编译期自动生成 Json 解析代码,用户使用方式简单,但是却能收获原生解析的性能。
More: Author   ReportBugs   
Tags:

功能简述

JsonLube 用于将 Json 对象转成 JAVA Bean 对象,不同于传统在运行时进行反射的方式,JsonLube 采用在编译时自动生成解析 Json 的代码,使用方式依然简单,然而在移动平台上却可以收获更好的性能。

使用方式

gradle 配置

    annotationProcessor 'com.alibaba.android:jsonlube-compiler:1.0.0.9@jar'
    compile ('com.alibaba.android:jsonlube:1.0.0.3@aar'){
        transitive=true
    }
`

Proguard 配置

-keep @com.alibaba.android.jsonlube.ProguardKeep public class *

Json -> Java Bean

//1. 在代码中直接调用 JsonLube.fromJson()将 Json 对象转成 Java bean 对象。
Teacher teacherBean = JsonLube.fromJson(jsonData, Teacher.class);

//2. 在 Teacher 类的定义中加上@FromJson 注解
@FromJson
public class Teacher {
    ...
}

Java Bean -> Json


//1. 直接调用 JsonLube.toJson()函数
JsonObject teacherJson = JsonLube.toJson(teacherBean);

//2. 在 Teacher 类的定义中加上@ToJson 注解
@ToJson
public class Teacher {
    ···
}

具体的 bean 的例子

//在 JsonLube.fromJson()/JsonLube.toJson()直接使用到的 Java bean 类需要加上@FromJson/@ToJson 注解,间接引用到的 bean 无需添加。
//这两个注解根据需要自行添加,如果只需要做反序列化能力,则添加@FromJson 一个就够了。
@FromJson
@ToJson
public class Teacher {
    public String name; //支持 public 成员变量

    private int age; // 支持 getter / setter 函数

    public int getAge(){
        return this.age;
    }

    public void setAge(int age){
        this.age = age;
    }

    @JsonLubeField(name="sex")
    public int s;


    public List<Student> students;  //支持 bean 的嵌套
}


public class Student {
    public String name;
    public int age;
    public int sex;
}
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools