java - 如何使用GSON解析JSON?

标签 java json gson android

如何获取数组“rate”中的值来调用 getters 方法?

我的 Json 响应如下所示,并且混淆了如何使用 GSON 解析它。请查看以下内容并指导我如何使用 GSON 解析它。

数据.json

{  
 "query":{  
   "count":2,
   "created":"2017-01-03T12:45:19Z",
   "lang":"en-us",
   "results":{  

      "rate":[  
        {  
           "id":"BTC/USD",
           "Name":"BTCUSD",
           "Rate":"985.50",
           "Date":"1/3/2017",
           "Time":"10:35am",
           "Ask":"985.50",
           "Bid":"985.35"
        },
        {  
           "id":"BTC/EUR",
           "Name":"BTCEUR",
           "Rate":"973.16",
           "Date":"1/3/2017",
           "Time":"10:35am",
           "Ask":"973.16",
           "Bid":"973.10"
        }
     ]
  }
 }
}

我使用类来解析

市场.java

public class Market {

  @SerializedName("query")
  private Query query;

 public Query getQuery() {
  return query;
 }

 public void setQuery(Query query) {
  this.query = query;
 }

}

查询.java

 public class Query {

  @SerializedName("count")
  private Integer count;
  @SerializedName("created")
  private String created;
  @SerializedName("lang")
  private String lang;
  @SerializedName("results")
  private Results results;

  public Integer getCount() {
     return count;
  }

  public void setCount(Integer count) {
      this.count = count;
  }

  public String getCreated() {
     return created;
  }

  public void setCreated(String created) {
      this.created = created;
  }

  public String getLang() {
    return lang;
  }

  public void setLang(String lang) {
    this.lang = lang;
  }

  public Results getResults() {
    return results;
  }

  public void setResults(Results results) {
    this.results = results;
  }

 }

Rate.java

public class Rate {

@SerializedName("id")
private String id;
@SerializedName("Name")
private String name;
@SerializedName("Rate")
private String rate;
@SerializedName("Date")
private String date;
@SerializedName("Time")
private String time;
@SerializedName("Ask")
private String ask;
@SerializedName("Bid")
private String bid;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getRate() {
return rate;
}

public void setRate(String rate) {
this.rate = rate;
}

public String getDate() {
return date;
}

public void setDate(String date) {
this.date = date;
}

public String getTime() {
return time;
}

public void setTime(String time) {
this.time = time;
}

public String getAsk() {
return ask;
}

public void setAsk(String ask) {
this.ask = ask;
}

public String getBid() {
return bid;
}

public void setBid(String bid) {
this.bid = bid;
}

}

结果.java

public class Results {

@SerializedName("rate")
private List<Rate> rate = null;

public List<Rate> getRate() {
return rate;
}

public void setRate(List<Rate> rate) {
this.rate = rate;
}

}

尝试获取值 Main.java

 public class Main {

  /* ..... */
     Gson gson = new Gson();
    Market market = gson.fromJson(json, Market.class);
     //error: incompatible types: Rate cannot be converted to List<Rate>
    for( List<Rate> res : market.getQuery().getResults().getRate());
    {
        Log.v(LOG_TAG, res); // error: cannot find symbol variable res

    }

 }

如何正确地做到这一点?

最佳答案

foreach循环的语法不正确。由于您尝试循环访问 Rate 对象列表,因此 res 的类型应该是 Rate,而不是 Rates 列表:

for (Rate res : market.getQuery().getResults().getRate()) {
    // code here
}

顺便说一句,您应该考虑在取消引用所有这些子对象之前检查 null 值,因为您可能会面临在运行时抛出 NullPointerException 的风险。

关于java - 如何使用GSON解析JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41465318/

相关文章:

json - com.google.gson.internal.LinkedTreeMap 类不能转换为 Partner 类

java - 在 Java 中实例化 Dictionary<T, U> 错误

java - 是否可以通过 RTP 传输多个 u-law 音频 channel ?

node.js - JSON 中的循环结构是什么?

java - 序列化字符串而不转义 "to\"

java - Apache Camel - GSON JsonSerializer 在路线上使用

java - 如何在 Java 中对多个继承对象建模

java - 关闭 Sonar 中的资源违规

javascript - Ajax 调用仅循环一个对象

java - 使用 com.fasterxml.jackson.databind.JsonNode 从 java 中的 json 数组解析 json 对象;