Search code examples
androidjsonandroid-parserlogan-square

LoganSquare parsing Android library : feedback, benchmarks, pros, cons


I'm using Jackson with DataBind library to parse json and map it java object. I'm also using Gson on other project where perf is less required.

On 17 Feb, LoganSquare library is first released, promising 4-10 time faster parsing as Gson.

  • What advantages as LoganSquare than Gson/Jackson didn't have ?
  • Pros and cons ?
  • Do you have benchmarks in production application ?
  • Is is stable enough for a production app?

I understand it can be a primarly opinion base question, so be as technic and specific as possible and base your answer on real data.


Solution

  • Well to be clear if you are releasing your app to devices with ART you will have a huge speed advantage trough parsing.

    so i will explain my experience with logansquare so far.

    pros :

    • Easy to use: with Gson you have to use Type for parsing json array to a object list, in loganSquare it is so easy as LoganSquare.parseList()
    • Faster : in any device (test it yourself) it is slightly faster.
    • FasterER: in ART devices its speed gap is really giant see their benchmark
    • RetroFit friendly: yeah it plays well with retrofit.

    cons :

    • NO REALM DB : I could't make it run with Realm db so far(I didnt tried hard yet)

    • Custom Type Adapter :Couldn't find a type adapter or something similar so far but I am not sure.

    see their benchmark here

    and here is my poor benchmark results(it is not a proper benchmark but it is something): Emulator nexus 5, with DalvikVM,4.2 jellybean

    Benchmarks

    parsing time sheet

    parsing time graph

    Parsed model

    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;
        }
    }