LoganSquare解析Android库:反馈,基准,专业,缺点

时间:2015-06-22 13:44:15

标签: android json android-parser logan-square

我使用 Jackson 和DataBind库来解析json并将其映射到java对象。我也在其他项目中使用Gson,而不需要穿孔。

2月17日,LoganSquare库首次发布,承诺4到10倍的解析时间为Gson。

  • LoganSquare比Gson / Jackson没有什么优势?
  • 优点和缺点?
  • 您是否在生产应用程序中有基准?
  • 生产应用程序是否足够稳定?

我知道它可能是一个主要的意见基础问题,所以尽可能技术和具体,并根据实际数据做出答案。

4 个答案:

答案 0 :(得分:19)

很明显,如果您将应用程序发布到具有ART的设备,您将通过解析获得巨大的速度优势。

所以我将解释我迄今为止使用logansquare的经验。

专业人士:

  • 易于使用:使用Gson,您必须使用Type将json数组解析为对象列表,在loganSquare中,它就像LoganSquare.parseList()
  • 一样简单
  • 更快:在任何设备中(自己测试)它会稍快一点。
  • 更快:在ART设备中,它的速度差距真的很大看他们的基准
  • RetroFit友好:是的,它可以很好地改造。
缺点:

  • NO REALM DB :到目前为止我无法使用Realm db运行(我还没努力)

  • 自定义类型适配器:到目前为止找不到类型适配器或类似内容但我不确定。

查看他们的基准here

这是我糟糕的基准测试结果(它不是一个合适的基准,但它是一些东西): 模拟器nexus 5,带有DalvikVM,4.2 jellybean

基准

parsing time sheet

parsing time graph

解析模型

import com.bluelinelabs.logansquare.annotation.JsonField;
import com.bluelinelabs.logansquare.annotation.JsonObject;
import com.google.gson.annotations.SerializedName;

/**
 * Created by Ercan on 6/26/2015.
 */
@JsonObject(serializeNullCollectionElements = true ,serializeNullObjects = true)
public class Village {

    @SerializedName("IdVillage")
    @JsonField(name ="IdVillage")
    String tbsVillageId;

    @SerializedName("TBS_VillageId")
    @JsonField(name ="TBS_VillageId")
    String townRefId;

    @SerializedName("VillageName")
    @JsonField(name ="VillageName")
    String villageName;

    @SerializedName("Status")
    @JsonField(name ="Status")
    String status;

    @SerializedName("DateInserted")
    @JsonField(name ="DateInserted")
    String dateInserted;

    @SerializedName("DateLastModified")
    @JsonField(name ="DateLastModified")
    String datelastModified;

    public String getTbsVillageId() {
        return tbsVillageId;
    }

    public void setTbsVillageId(String tbsVillageId) {
        this.tbsVillageId = tbsVillageId;
    }

    public String getTownRefId() {
        return townRefId;
    }

    public void setTownRefId(String townRefId) {
        this.townRefId = townRefId;
    }

    public String getVillageName() {
        return villageName;
    }

    public void setVillageName(String villageName) {
        this.villageName = villageName;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getDateInserted() {
        return dateInserted;
    }

    public void setDateInserted(String dateInserted) {
        this.dateInserted = dateInserted;
    }

    public String getDatelastModified() {
        return datelastModified;
    }

    public void setDatelastModified(String datelastModified) {
        this.datelastModified = datelastModified;
    }
}

答案 1 :(得分:4)

我在使用Android 6.0.1的Nexus 5设备上运行了LoganSquare Benchmark项目,结果如下:

LoganSquare Benchmark screenshots

此外,在使用lib的短暂时间之后,这是我的优点和缺点:

<强>赞成

  1. 在解析和序列化方面都非常快
  2. 小图书馆大小
  3. 列表解析和序列化的方便方法
  4. 有用的转换器
  5. 编译时错误,而不仅仅是运行时
  6. <强>缺点

    1. 没有太多的文档,也没有太多的问题和答案 StackOverflow:)
    2. 支持的类型不多
    3. 仅限地图集合中支持的字符串键
    4. 我写了example project来了解LoganSquare的工作方式以及blog post,所以请查看更多信息。

答案 2 :(得分:1)

response.body()是字符串json响应

// MovieData是模型类

 MovieData movieData=LoganSquare.parse(response.body(),MovieData.class);

 Log.d("onResponse: ",movieData.getTitle());

答案 3 :(得分:1)

该库自4年以上没有更新。

到目前为止,它的运行情况一直很好,但是据我所知,它在第5步之后将停止工作。