解析gson时遇到问题

时间:2015-05-03 23:49:56

标签: java android json gson

我正在尝试解析来自http://api.sfpark.org/sfpark/rest/availabilityservice?response=json&pricing=yes

的数据

特别是这部分

RATES: {
 RS: [
      {
          BEG: "12:00 AM",
          END: "2:00 AM",
          RATE: "0",
          RQ: "No charge"
      },
      {
          BEG: "2:00 AM",
          END: "6:00 AM",
          RATE: "0",
          RQ: "Str sweep"
      },
      {
          BEG: "6:00 AM",
          END: "12:00 AM",
          RATE: "0",
          RQ: "No charge"
      }
  ]
},

我有这个代码

if (dataObject.getAsJsonObject("RATES").isJsonObject()){
  JsonObject rates = dataObject.getAsJsonObject("RATES");
  if (rates.getAsJsonArray("RS").isJsonArray()){
      //parse stuff
  }
}

我在这里无法将com.google.gson.JsonObject强制转换为com.google.gson.JsonArray

 if (rates.getAsJsonArray("RS").isJsonArray())

如果我将其更改为

if (rates.getAsJsonObject("RS").isJsonObject())

我收到com.google.gson.JsonArray无法转换为com.google.gson.JsonObject

1 个答案:

答案 0 :(得分:0)

由于您已指定API的链接,因此您可以执行以下操作:

首先,前往http://www.jsonschema2pojo.org/并将API转储到那里,它将为您生成必要的POJO课程。

将网站的配置设置为以下内容:

enter image description here

根据您的API,它会生成以下内容:

@Generated("org.jsonschema2pojo")
public class Example {

@Expose
private String STATUS;
@SerializedName("NUM_RECORDS")
@Expose
private String NUMRECORDS;
@Expose
private String MESSAGE;
@SerializedName("AVAILABILITY_UPDATED_TIMESTAMP")
@Expose
private String AVAILABILITYUPDATEDTIMESTAMP;
@SerializedName("AVAILABILITY_REQUEST_TIMESTAMP")
@Expose
private String AVAILABILITYREQUESTTIMESTAMP;
@Expose
private List<com.example.AVL> AVL = new ArrayList<com.example.AVL>();

/**
* 
* @return
* The STATUS
*/
public String getSTATUS() {
return STATUS;
}

/**
* 
* @param STATUS
* The STATUS
*/
public void setSTATUS(String STATUS) {
this.STATUS = STATUS;
}

/**
* 
* @return
* The NUMRECORDS
*/
public String getNUMRECORDS() {
return NUMRECORDS;
}

/**
* 
* @param NUMRECORDS
* The NUM_RECORDS
*/
public void setNUMRECORDS(String NUMRECORDS) {
this.NUMRECORDS = NUMRECORDS;
}

/**
* 
* @return
* The MESSAGE
*/
public String getMESSAGE() {
return MESSAGE;
}

/**
* 
* @param MESSAGE
* The MESSAGE
*/
public void setMESSAGE(String MESSAGE) {
this.MESSAGE = MESSAGE;
}

/**
* 
* @return
* The AVAILABILITYUPDATEDTIMESTAMP
*/
public String getAVAILABILITYUPDATEDTIMESTAMP() {
return AVAILABILITYUPDATEDTIMESTAMP;
}

/**
* 
* @param AVAILABILITYUPDATEDTIMESTAMP
* The AVAILABILITY_UPDATED_TIMESTAMP
*/
public void setAVAILABILITYUPDATEDTIMESTAMP(String AVAILABILITYUPDATEDTIMESTAMP) {
this.AVAILABILITYUPDATEDTIMESTAMP = AVAILABILITYUPDATEDTIMESTAMP;
}

/**
* 
* @return
* The AVAILABILITYREQUESTTIMESTAMP
*/
public String getAVAILABILITYREQUESTTIMESTAMP() {
return AVAILABILITYREQUESTTIMESTAMP;
}

/**
* 
* @param AVAILABILITYREQUESTTIMESTAMP
* The AVAILABILITY_REQUEST_TIMESTAMP
*/
public void setAVAILABILITYREQUESTTIMESTAMP(String AVAILABILITYREQUESTTIMESTAMP) {
this.AVAILABILITYREQUESTTIMESTAMP = AVAILABILITYREQUESTTIMESTAMP;
}

/**
* 
* @return
* The AVL
*/
public List<com.example.AVL> getAVL() {
return AVL;
}

/**
* 
* @param AVL
* The AVL
*/
public void setAVL(List<com.example.AVL> AVL) {
this.AVL = AVL;
}

}

接下来,执行以下操作:

 Gson gson = new Gson();
 Example example = gson.fromJson(response, Example.class);

此处响应是您获得的网络响应。

这是我在处理API请求时定期执行的操作。我希望这也可以帮助你:)

相关问题