【问题标题】:Parse Json with Jackson Android使用 Jackson Android 解析 Json
【发布时间】:2014-11-03 14:14:04
【问题描述】:

我正在开发一个使用大量 json 的应用程序,我使用 Gson 进行解析,但它真的很慢,现在我正在尝试使用 Jackson,这是我第一次听说它,所以我不知道如何很好地使用它。 我的 json 是这样的:

{
    "action": "login",
    "status": true,
    "message": "OK",
    "duration": 144,
    "response": {
        "token": "b6a1e3b87c86531d91afa91bb23aca46"
    }
}

我的反序列化课程就像:

public class HttpWebServiceObject {
    private String action;
    private boolean status;
    private String message;
    private String duration;
    private String response;

    //getters and setters

}

有人可以帮我解决这个问题吗?

提前致谢。

编辑:

我也可以有这样的json:

{
    "action": "getUserFollowers",
    "status": true,
    "message": "OK",
    "duration": 187,
    "response": [
        {
            "id": "20810",
            "name": "thyago",
            "username": "thyago",
            "location": "guarujá,brasil",
            "photo": "profile/48d15179063126b40f6a5b1bbdea7f1e.jpg",
            "following": false,
            "numfollowing": 3,
            "numfollowers": 7
        },
        {
            "id": "933",
            "name": "Edson Alves",
            "username": "prazermatheus",
            "location": "Rio de Janeiro, Brasil.",
            "photo": "profile/bcc90c29054781adcd4569bb59251dba.jpg",
            "following": false,
            "numfollowing": 2689,
            "numfollowers": 1373
        },
        {
            "id": "753",
            "name": "Yasmim Teófilo",
            "username": "yasmim_gomesz",
            "location": "Pacajus, Brasil",
            "photo": "/profile/default.png",
            "following": false,
            "numfollowing": 1,
            "numfollowers": 6
        },
        {
            "id": "531",
            "name": "Muriel Aragão",
            "username": "muriaragao",
            "location": "Salvador, Brasil",
            "photo": "profile/0f6b504736723ea80c9cd15dabb3f0c5.jpg",
            "following": false,
            "numfollowing": 348,
            "numfollowers": 32
        },
        {
            "id": "492",
            "name": "shashank",
            "username": "shashank",
            "location": "india",
            "photo": "/profile/default.png",
            "following": false,
            "numfollowing": 5,
            "numfollowers": 3
        },
        {
            "id": "307",
            "name": "Clineu Iansen",
            "username": "clineu",
            "location": "Curitiba, Brazil",
            "photo": "profile/3d37a1e9c795a83c672ecacf575ee30a.jpg",
            "following": false,
            "numfollowing": 57,
            "numfollowers": 946
        },
        {
            "id": "277",
            "name": "maharshi",
            "username": "india",
            "location": "india",
            "photo": "profile/86d403617a30469f11403f0c9c65141b.jpg",
            "following": true,
            "numfollowing": 16,
            "numfollowers": 1848
        },
        {
            "id": "57",
            "name": "Alexandre",
            "username": "xandyhsf",
            "location": "Itajai, Brasil",
            "photo": "/profile/default.png",
            "following": false,
            "numfollowing": 51,
            "numfollowers": 16
        },
        {
            "id": "34",
            "name": "Karina Ceconello Ton",
            "username": "KarinaCeconello",
            "location": "Quatro Barras/Brasil",
            "photo": "profile/9bc1fb97263dc9a242766c87e4acf1c4.jpg",
            "following": false,
            "numfollowing": 5,
            "numfollowers": 198
        },
        {
            "id": "25",
            "name": "Thiago Bodruk",
            "username": "ThiagoBodruk",
            "location": "Quatro Barras, Brazil",
            "photo": "profile/56111881a4ebe0f0fc5cb85faa262e17.jpg",
            "following": false,
            "numfollowing": 26,
            "numfollowers": 221
        }
    ]
}

如何进行一般解析以反序列化并将响应作为字符串?

【问题讨论】:

  • 鉴于 json 的大小,gson 应该不会很慢。
  • 在这个请求中,gson 并不慢,但在其他方面是。

标签: android json parsing object jackson


【解决方案1】:

首先像这样改变你的pojo

public class HttpWebServiceObject {
  private String action;
  private boolean status;
  private String message;
  private String duration;
  private Response response; // as your json string it is a object. not a String. so create a seperate  pojo for response

  //getters and setters

}

那么您可以使用ObjectMapper 将json 字符串转换为java 对象。 例如

ObjectMapper mapper = new ObjectMapper();
HttpWebServiceObject httpWebServiceObject = mapper.readValue(yourJsonString,HttpWebServiceObject.class);

【讨论】:

    【解决方案2】:

    这就是你的HttpWebServiceObject.javaResponse.java 应该是什么样子。这是使用 this website 生成的,它接受 json 并将其转换为 pojos。拥有这两个类后,您可以使用ObjectMapper 将 json 字符串映射到这些类。

    ------------------------com.example.HttpWebServiceObject.java----- ------------------------------

    package com.example;
    
    import java.util.HashMap;
    import java.util.Map;
    import javax.annotation.Generated;
    import com.fasterxml.jackson.annotation.JsonAnyGetter;
    import com.fasterxml.jackson.annotation.JsonAnySetter;
    import com.fasterxml.jackson.annotation.JsonIgnore;
    import com.fasterxml.jackson.annotation.JsonInclude;
    import com.fasterxml.jackson.annotation.JsonProperty;
    import com.fasterxml.jackson.annotation.JsonPropertyOrder;
    
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @Generated("org.jsonschema2pojo")
    @JsonPropertyOrder({
    "action",
    "status",
    "message",
    "duration",
    "response"
    })
    public class HttpWebServiceObject {
    
    @JsonProperty("action")
    private String action;
    @JsonProperty("status")
    private Boolean status;
    @JsonProperty("message")
    private String message;
    @JsonProperty("duration")
    private Integer duration;
    @JsonProperty("response")
    private Response response;
    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();
    
    /**
    * 
    * @return
    * The action
    */
    @JsonProperty("action")
    public String getAction() {
    return action;
    }
    
    /**
    * 
    * @param action
    * The action
    */
    @JsonProperty("action")
    public void setAction(String action) {
    this.action = action;
    }
    
    /**
    * 
    * @return
    * The status
    */
    @JsonProperty("status")
    public Boolean getStatus() {
    return status;
    }
    
    /**
    * 
    * @param status
    * The status
    */
    @JsonProperty("status")
    public void setStatus(Boolean status) {
    this.status = status;
    }
    
    /**
    * 
    * @return
    * The message
    */
    @JsonProperty("message")
    public String getMessage() {
    return message;
    }
    
    /**
    * 
    * @param message
    * The message
    */
    @JsonProperty("message")
    public void setMessage(String message) {
    this.message = message;
    }
    
    /**
    * 
    * @return
    * The duration
    */
    @JsonProperty("duration")
    public Integer getDuration() {
    return duration;
    }
    
    /**
    * 
    * @param duration
    * The duration
    */
    @JsonProperty("duration")
    public void setDuration(Integer duration) {
    this.duration = duration;
    }
    
    /**
    * 
    * @return
    * The response
    */
    @JsonProperty("response")
    public Response getResponse() {
    return response;
    }
    
    /**
    * 
    * @param response
    * The response
    */
    @JsonProperty("response")
    public void setResponse(Response response) {
    this.response = response;
    }
    
    @JsonAnyGetter
    public Map<String, Object> getAdditionalProperties() {
    return this.additionalProperties;
    }
    
    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
    this.additionalProperties.put(name, value);
    }
    
    }
    

    ------------------------com.example.Response.java----- ------------------------------

    package com.example;
    
    import java.util.HashMap;
    import java.util.Map;
    import javax.annotation.Generated;
    import com.fasterxml.jackson.annotation.JsonAnyGetter;
    import com.fasterxml.jackson.annotation.JsonAnySetter;
    import com.fasterxml.jackson.annotation.JsonIgnore;
    import com.fasterxml.jackson.annotation.JsonInclude;
    import com.fasterxml.jackson.annotation.JsonProperty;
    import com.fasterxml.jackson.annotation.JsonPropertyOrder;
    
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @Generated("org.jsonschema2pojo")
    @JsonPropertyOrder({
    "token"
    })
    public class Response {
    
    @JsonProperty("token")
    private String token;
    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();
    
    /**
    * 
    * @return
    * The token
    */
    @JsonProperty("token")
    public String getToken() {
    return token;
    }
    
    /**
    * 
    * @param token
    * The token
    */
    @JsonProperty("token")
    public void setToken(String token) {
    this.token = token;
    }
    
    @JsonAnyGetter
    public Map<String, Object> getAdditionalProperties() {
    return this.additionalProperties;
    }
    
    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
    this.additionalProperties.put(name, value);
    }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-07
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-11
      • 2017-06-28
      • 1970-01-01
      相关资源
      最近更新 更多