我在DataBind库中使用 Jackson 来解析json并将其映射为java对象。我还在其他不需要perf的项目上使用了Gson。

2月17日,LoganSquare库首次发布,有望像Gson一样将解析速度提高4-10倍。

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

  • 我了解这可能是一个主要基于意见的问题,因此请尽可能地做到技术和具体,并将您的答案基于真实数据。

    最佳答案

    很清楚,如果您将应用发布到具有ART的设备上,则通过解析将具有巨大的速度优势。

    因此,到目前为止,我将解释我在logansquare上的经验。

    优点:

  • 易于使用:对于Gson,您必须使用Type将json数组解析为对象列表,在loganSquare中,它像LoganSquare.parseList()
  • 一样容易
  • 更快:在任何设备(自己测试)中,它都略快一些。
  • FasterER :在ART设备中,其速度差距确实很大,请参见其基准
  • RetroFit友好:是的,它可以很好地配合改造。

  • 缺点:
  • 没有REALM数据库:到目前为止,我无法使其与Realm db一起运行(我还没有尝试过)
  • 自定义类型适配器:到目前为止,找不到类型适配器或类似的适配器,但是我不确定。

  • 查看他们的基准here

    这是我较差的基准测试结果(虽然它不是适当的基准测试,但确实如此):
    Emulator nexus 5,带有DalvikVM,4.2 bean 形软糖

    基准测试

    android - LoganSquare解析Android库: feedback,基准,优点和缺点-LMLPHP

    android - LoganSquare解析Android库: feedback,基准,优点和缺点-LMLPHP

    解析模型
    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;
        }
    }
    

    关于android - LoganSquare解析Android库: feedback,基准,优点和缺点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30981565/

    10-12 06:04