Gson 解析动态 json 键
Gson Parsing with dynamic json keys
我浏览了很多关于动态键解析的帖子。但是在使用 Gson 解析 JSON 格式时仍然感到困惑,这是我现有项目中的新响应。
{
"position":0,
“source”:[“Win","Web","Capture","iOS","Camera","Back"],
“source_data”:{
"Web”:{“years”:[{“start”:1500,"end”:1700}]},
"Win":{"years":[{"start”:1700,"end”:2000}]},
"iOS":{"years":[{"start”:1700,"end”:2200}]},
"Back":{"years":[{"start”:2100,"end”:2300}]},
"Camera":{"years":[{"start”:2200,"end":2200},{"start”:2200,"end”:2600},{"start”:2300,"end”:2600}]},
"Capture":{"years":[{"start”:1700,"end”:2100}]}
}
}
我已经 Json 使用 Gson 库进行解析设置。
下面是我用来解析的代码片段。但是 source_data 键的值没有存储到我的模型中 class
@Expose
@SerializedName("source_data")
private SourceData mSourceData;
public class SourceData {
HashMap<String, SourceYears> mSourceYears;
public HashMap<String, SourceYears> getSourceYears() {
return mSourceYears;
}
public void setSourceYears(HashMap<String, SourceYears> years) {
this.mSourceYears = years;
}
}
public class SourceYears {
@Expose
@SerializedName("years")
private List<Years> mYears;
public List<Years> getYears() {
return mYears;
}
public void setYears(List<Years> years) {
this.mYears = years;
}
}
此处 Years
是包含 start
和 end
键的 class。
如果有人发现我做错了什么,请提出建议。
请尝试使用这个,我已经根据您提供的 json 改进了模型,并且由于双引号错误,您提供的 json 不准确。
这是我的 Pojo 类
class YearWrapper {
List<YearObject> years;
public List<YearObject> getYears() {
return years;
}
public void setYears(List<YearObject> years) {
this.years = years;
}
@Override
public String toString() {
return "YearWrapper{" +
"years=" + years +
'}';
}
}
class YearObject {
int start;
int end;
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
}
@Override
public String toString() {
return "YearObject{" +
"start=" + start +
", end=" + end +
'}';
}
}
class KeyValueMapModel {
int position;
List<String> source;
@SerializedName("source_data")
Map<String, YearObject> sourceData;
public int getPosition() {
return position;
}
public void setPosition(int position) {
this.position = position;
}
public List<String> getSource() {
return source;
}
public void setSource(List<String> source) {
this.source = source;
}
public Map<String, YearObject> getSourceData() {
return sourceData;
}
public void setSourceData(Map<String, YearObject> sourceData) {
this.sourceData = sourceData;
}
@Override
public String toString() {
return "KeyValueMapModel{" +
"position=" + position +
", source=" + source +
", sourceData=" + sourceData +
'}';
}
}
这是我调用它的方式:
Gson gson = new Gson();
KeyValueMapModel keyValueMapModel = gson.fromJson(yourJsonString, KeyValueMapModel.class);
System.out.println(keyValueMapModel);
我浏览了很多关于动态键解析的帖子。但是在使用 Gson 解析 JSON 格式时仍然感到困惑,这是我现有项目中的新响应。
{
"position":0,
“source”:[“Win","Web","Capture","iOS","Camera","Back"],
“source_data”:{
"Web”:{“years”:[{“start”:1500,"end”:1700}]},
"Win":{"years":[{"start”:1700,"end”:2000}]},
"iOS":{"years":[{"start”:1700,"end”:2200}]},
"Back":{"years":[{"start”:2100,"end”:2300}]},
"Camera":{"years":[{"start”:2200,"end":2200},{"start”:2200,"end”:2600},{"start”:2300,"end”:2600}]},
"Capture":{"years":[{"start”:1700,"end”:2100}]}
}
}
我已经 Json 使用 Gson 库进行解析设置。 下面是我用来解析的代码片段。但是 source_data 键的值没有存储到我的模型中 class
@Expose
@SerializedName("source_data")
private SourceData mSourceData;
public class SourceData {
HashMap<String, SourceYears> mSourceYears;
public HashMap<String, SourceYears> getSourceYears() {
return mSourceYears;
}
public void setSourceYears(HashMap<String, SourceYears> years) {
this.mSourceYears = years;
}
}
public class SourceYears {
@Expose
@SerializedName("years")
private List<Years> mYears;
public List<Years> getYears() {
return mYears;
}
public void setYears(List<Years> years) {
this.mYears = years;
}
}
此处 Years
是包含 start
和 end
键的 class。
如果有人发现我做错了什么,请提出建议。
请尝试使用这个,我已经根据您提供的 json 改进了模型,并且由于双引号错误,您提供的 json 不准确。
这是我的 Pojo 类
class YearWrapper {
List<YearObject> years;
public List<YearObject> getYears() {
return years;
}
public void setYears(List<YearObject> years) {
this.years = years;
}
@Override
public String toString() {
return "YearWrapper{" +
"years=" + years +
'}';
}
}
class YearObject {
int start;
int end;
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
}
@Override
public String toString() {
return "YearObject{" +
"start=" + start +
", end=" + end +
'}';
}
}
class KeyValueMapModel {
int position;
List<String> source;
@SerializedName("source_data")
Map<String, YearObject> sourceData;
public int getPosition() {
return position;
}
public void setPosition(int position) {
this.position = position;
}
public List<String> getSource() {
return source;
}
public void setSource(List<String> source) {
this.source = source;
}
public Map<String, YearObject> getSourceData() {
return sourceData;
}
public void setSourceData(Map<String, YearObject> sourceData) {
this.sourceData = sourceData;
}
@Override
public String toString() {
return "KeyValueMapModel{" +
"position=" + position +
", source=" + source +
", sourceData=" + sourceData +
'}';
}
}
这是我调用它的方式:
Gson gson = new Gson();
KeyValueMapModel keyValueMapModel = gson.fromJson(yourJsonString, KeyValueMapModel.class);
System.out.println(keyValueMapModel);