Android 使用改型解析动态键Json字符串
我试图解析以下动态键Json字符串Android 使用改型解析动态键Json字符串,android,json,retrofit,Android,Json,Retrofit,我试图解析以下动态键Json字符串 "report":{ "data":{ "results":{ "558952cca6d73d7d81c2eb9d":{ "Max":-1, "Min":-1, "Slope":-1, }, "558ce148a6d73d7d81c2fa8a":{
"report":{
"data":{
"results":{
"558952cca6d73d7d81c2eb9d":{
"Max":-1,
"Min":-1,
"Slope":-1,
},
"558ce148a6d73d7d81c2fa8a":{
"Max":-2,
"Min":-1,
"Slope":-2,
}
}
}
}
public class Report {
@SerializedName("data")
@Expose
private Data data;
public Data getData() {
return data;
}
public void setData(Data data) {
this.data = data;
}
@Override
public String toString() {
return "Report{" +
"data=" + data +
'}';
}
}
public class Data {
@SerializedName("results")
@Expose
private ResultInside result;
public ResultInside getResult() {
return result;
}
public void setResult(ResultInside result) {
this.result = result;
}
}
public class ResultInside {
/*@SerializedName("results")
@Expose*/
private Map<String, Vitals> elemDetails = new HashMap<>();
public Map<String, Vitals> getElemDetails() {
return elemDetails;
}
public void setElemDetails(Map<String, Vitals> elemDetails) {
this.elemDetails = elemDetails;
}
}
下面我尝试获取数据,但在解析最后一个动态json字符串时出错
"report":{
"data":{
"results":{
"558952cca6d73d7d81c2eb9d":{
"Max":-1,
"Min":-1,
"Slope":-1,
},
"558ce148a6d73d7d81c2fa8a":{
"Max":-2,
"Min":-1,
"Slope":-2,
}
}
}
}
public class Report {
@SerializedName("data")
@Expose
private Data data;
public Data getData() {
return data;
}
public void setData(Data data) {
this.data = data;
}
@Override
public String toString() {
return "Report{" +
"data=" + data +
'}';
}
}
public class Data {
@SerializedName("results")
@Expose
private ResultInside result;
public ResultInside getResult() {
return result;
}
public void setResult(ResultInside result) {
this.result = result;
}
}
public class ResultInside {
/*@SerializedName("results")
@Expose*/
private Map<String, Vitals> elemDetails = new HashMap<>();
public Map<String, Vitals> getElemDetails() {
return elemDetails;
}
public void setElemDetails(Map<String, Vitals> elemDetails) {
this.elemDetails = elemDetails;
}
}
公共类报告{
@SerializedName(“数据”)
@暴露
私人数据;
公共数据getData(){
返回数据;
}
公共无效设置数据(数据){
这个数据=数据;
}
@凌驾
公共字符串toString(){
返回“报告{”+
“数据=”+数据+
'}';
}
}
公共类数据{
@SerializedName(“结果”)
@暴露
私人结果附带结果;
public ResultInside getResult(){
返回结果;
}
公共void setResult(ResultInside结果){
this.result=结果;
}
}
公共类ResultInside{
/*@SerializedName(“结果”)
@暴露*/
私有映射elemDetails=newhashmap();
公共地图getElemDetails(){
返回元素细节;
}
公共无效集合元素详细信息(地图元素详细信息){
this.elemDetails=elemDetails;
}
}
任何关于如何在这种情况下解析的建议 您的
resultInside
类正在添加JSON中不存在的额外对象层。尝试将地图移动到数据
类结果
字段
public class Data {
@SerializedName("results")
@Expose
private Map<String, Vitals> result;
//....
}
公共类数据{
@SerializedName(“结果”)
@暴露
私有地图结果;
//....
}
更好的方法是:
----------------------
public class Report {
@SerializedName("data")
@Expose
private Data data;
----------------------
public class Data {
public HashMap<String, DataValues> dataValues;
public Data() {
this.dataVaues = new HashMap<>();
}
}
-----------------------------
我希望这能帮助别人你好!你找到解决办法了吗?我也有同样的问题。@genkakasysan Check接受了下面的答案。@Shubh Hai,我也有同样的问题,我不知道如何为动态键添加Pojo类,你能告诉我你在Vitals类中使用了什么吗?@MathaN Check使用json字符串和受尊重的数据类。报告->数据->结果->生命体征。所以必须包含max,min,slope作为变量。我犯了一个错误,在Result中创建了另一个ResultInside类,它将运行时键映射到Vitals类,但事实并非如此。检查下面的已接受答案,以创建ResultInsid并处理其结果类本身。在改型过程中,如果要使用动态键(使用动态名称)解析JSON,则需要确保使用HashMap。所以这个答案是我的正确答案。只需确保将HashMap放在具有静态名称(而不是动态名称)的对象级别,非常感谢。您节省了我的时间:)如果每个动态键的子项之一是JSONObject的JSONArray,如何处理(从中接收数据)。谢谢你能解释一下为什么这样做吗?看起来GSON正在跳过动态命名的密钥,但我不明白为什么。