尝试将Manual JSON转换为Class Object进程为Automatic

时间:2016-09-12 13:30:19

标签: android-studio

示例JSON数据

{
  "Status": true,
  "Message": "Roles retrieved successfully",
  "Data": [
    {
      "Role": "SuperAdmin",
    },
    {
      "Role": "Admin",
    }
  ]
}

角色等级

public class Role {
    public int  Role;

    public int getRole() {
        return Role;
    }

    public void setRoleID(String role) {
        Role = role;
    }

}

Json Data Equivalent class

public class RoleData {
    public String Message;
    public boolean Status;
    public List<Role> Data;


    public String getMessage() {
        return Message;
    }

    public void setMessage(String message) {
        Message = message;
    }

    public boolean isStatus() {
        return Status;
    }

    public void setStatus(boolean status) {
        Status = status;
    }

    public List<Role> getData() {
        return Data;
    }

    public void setData(List<Role> data) {
        Data = data;
    }
}

下面是我的代码,用于将检索到的JSON数据解析为RoleData类型的类对象

private void parseJsonResponse(String responsestring) throws JSONException {

    RoleData roleData = new RoleData();
    JSONObject response = new JSONObject(responsestring);
    if ((response == null) || response.length() == 0) {
        return;
    }
    try {

        if (response.getBoolean("Status")) {
            JSONArray data = response.getJSONArray("Data");
            List<Role> temp = new ArrayList<Role>();
            for (int i = 0; i < data.length(); i++) {
                JSONObject dataObj = data.getJSONObject(i);
                Role role = new Role();
                role.setRole(dataObj.getString("Role"));
                roleData.setMessage(response.getString("Message"));
                roleData.setStatus(response.getBoolean("Status"));
                temp.add(role);
            }
            roleData.setData(temp);
        }
    }catch(JSONException e){
        e.printStackTrace();
    }
}

问题

有没有更好的方法可以避免以上编写解析代码?在.NET中,我们可以使用JsonConvert.DeserializeObject方法将JSON转换为类对象,如下所示。

 var result = JsonConvert.DeserializeObject<RoleData>(JSON_Response);

1 个答案:

答案 0 :(得分:1)

结帐此库:

https://github.com/google/gson

https://github.com/FasterXML/jackson(非常支持json)

https://www.mkyong.com/java/jackson-2-convert-java-object-to-from-json/

两者都基于注释来配置与json中的名称不匹配的变量,通常它们不是必需的:)