示例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);
答案 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中的名称不匹配的变量,通常它们不是必需的:)