![](/img/trans.png)
[英]How do I parse a field from a deep nested json object using Gson and retrofit in android?
[英]How to parse nested JSON data in Android with Retrofit and Gson
我熟悉使用Retrofit解析基本JSON數據,但為此JSON響應而努力實現正確的POJO對象。
這是JSON數據:
{
"observations": [
{
"id": "0",
"type": "1st type",
"data": [
{
"name": "some_name",
"result": "some_result"
}
]
},
{
"id": "1",
"type": "2nd type",
"data": [
{
"name2": "some_name2",
"measurement": "some_measurement",
"field": "some_field",
"result2": "some_result2"
}
]
}
]
}
我已經為兩種觀察類型創建了類:
public class DataType1{
@SerializedName("name")
@Expose
private String name;
@SerializedName("measurement")
@Expose
private String measurement;
@SerializedName("field")
@Expose
private String field;
@SerializedName("result")
@Expose
private String result;
}
public class DataType2 {
@SerializedName("name")
@Expose
private String name;
@SerializedName("result")
@Expose
private String result;
}
一般想法是通過“類型”確定數據的類型並將其發送到相應的類:
if(response.body().getType.equals("1st type"))
{
Gson gson = new GsonBuilder().create();
DataType1 data = gson.fromJson(response.body().getObservation, DataType1.class);
}
我假設,接下來,我必須創建一個單獨的ObservationsResponce類以獲得觀察列表:
public class Observation {
@SerializedName("id")
@Expose
private String id;
@SerializedName("type")
@Expose
private String type;
@SerializedName("observation")
@Expose
private List<??What Should Be Here??> observation = null;
}
但是問題是觀察值可以具有不同的數據類型和內部如此不同的字段。 在這種情況下,此列表應該是哪個類?
MyObservation.java
public class MyObservation
{
private Observations[] observations;
public Observations[] getObservations ()
{
return observations;
}
public void setObservations (Observations[] observations)
{
this.observations = observations;
}
@Override
public String toString()
{
return "MyObservation [observations = "+observations+"]";
}
}
Observations.java
public class Observations
{
private Data[] data;
private String id;
private String type;
public Data[] getData ()
{
return data;
}
public void setData (Data[] data)
{
this.data = data;
}
public String getId ()
{
return id;
}
public void setId (String id)
{
this.id = id;
}
public String getType ()
{
return type;
}
public void setType (String type)
{
this.type = type;
}
@Override
public String toString()
{
return "ClassPojo [data = "+data+", id = "+id+", type = "+type+"]";
}
}
Data.java
public class Data
{
private String result;
private String name;
//add these fields manually
private String measurement;
private String field;
public String getResult ()
{
return result;
}
public void setResult (String result)
{
this.result = result;
}
public String getMeasurement ()
{
return measurement;
}
public void setMeasurement (String measurement)
{
this.measurement = measurement;
}
public String getField ()
{
return field;
}
public void setField (String field)
{
this.field = field;
}
public String getName ()
{
return name;
}
public void setName (String name)
{
this.name = name;
}
@Override
public String toString()
{
return "ClassPojo [result = "+result+", name = "+name+"]";
}
}
而且最好使用相同的密鑰,然后如果您想要不同的密鑰並想要生成POJO,則使用此鏈接
檢查此pojo類,我不確定它是否有效
package com.example;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class Datum {
@SerializedName("name")
@Expose
private String name;
@SerializedName("result")
@Expose
private String result;
@SerializedName("name2")
@Expose
private String name2;
@SerializedName("measurement")
@Expose
private String measurement;
@SerializedName("field")
@Expose
private String field;
@SerializedName("result2")
@Expose
private String result2;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public String getName2() {
return name2;
}
public void setName2(String name2) {
this.name2 = name2;
}
public String getMeasurement() {
return measurement;
}
public void setMeasurement(String measurement) {
this.measurement = measurement;
}
public String getField() {
return field;
}
public void setField(String field) {
this.field = field;
}
public String getResult2() {
return result2;
}
public void setResult2(String result2) {
this.result2 = result2;
}
}
class Example {
@SerializedName("observations")
@Expose
private List<Observation> observations = null;
public List<Observation> getObservations() {
return observations;
}
public void setObservations(List<Observation> observations) {
this.observations = observations;
}
}
class Observation {
@SerializedName("id")
@Expose
private String id;
@SerializedName("type")
@Expose
private String type;
@SerializedName("data")
@Expose
private List<Datum> data = null;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public List<Datum> getData() {
return data;
}
public void setData(List<Datum> data) {
this.data = data;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.