如何使用GSON解析JSON? [英] How to parse JSON using GSON?
问题描述
如何通过数组rate中的值来调用getters方法?
我的Json响应如下所示,并且如何使用GSON解析它。请看下面的内容,并指导我如何使用GSON解析它。
data.json
query:{count:2,
created:2017-01-03T12:45:19Z,
lang:en-us,
results:{
rate:[
{
id:BTC / USD,
姓名:BTCUSD,
费率:985.50,
日期:1/3/2017,
时间:上午10:35,
询问:985.50,
出价:985.35
},
{
id: BTC / EUR,
姓名:BTCEUR,
费率:973.16,
日期:1/3/2017,
时间:上午10:35,
询问:973.16,
出价:973.10
}
]
}
$ / code>
我使用类来解析分离
Market.java
公共类市场{
@SerializedName(query)
私人查询查询;
public Query getQuery(){
return query;
}
public void setQuery(查询查询){
this.query = query;
}
}
Query.java
公共类查询{$私有整数;
@SerializedName(创建)
创建的私人字符串;
@SerializedName(lang)
private String lang;
@SerializedName(结果)
私人结果结果;
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结果getResults(){
返回结果;
}
public void setResults(Results results){
this.results = results;
}
}
Rate.java
public class Rate {
@SerializedName(id)
private String id;
@SerializedName(Name)
私人字符串名称;
@SerializedName(Rate)
private String rate;
@SerializedName(Date)
private String date;
@SerializedName(Time)
private String time;
@SerializedName(Ask)
private String ask;
@SerializedName(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;
}
}
Results.java
public class Results {
@SerializedName(rate)
private List< Rate> rate = null;
公共列表<费率> getRate(){
返回率;
}
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);
//错误:不兼容的类型:费率无法转换为列表< Rate> (List< Rate> res:market.getQuery()。getResults()。getRate());
。
{
Log.v(LOG_TAG,res); //错误:无法找到符号变量res
}
}
如何正确地做到这一点?
每个循环的语法都是不正确的。由于您试图循环显示Rate对象列表,所以 res
的类型应该是Rate,而不是Rate列表:
$ (Rate res:market.getQuery()。getResults()。getRate()){
// code here
}
pre> 另一方面,在运行风险时,应该考虑在解引用所有这些子对象之前检查空值在运行时抛出NullPointerException。
How get value in array "rate" to invoke getters methods ?
My Json response is something as below and confused how to parse it using GSON. Please have look on the following and guide me how i can parse it using GSON.
data.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"
}
]
}
}
}
I use classes to parse apart
Market.java
public class Market {
@SerializedName("query")
private Query query;
public Query getQuery() {
return query;
}
public void setQuery(Query query) {
this.query = 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;
}
}
Results.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;
}
}
Trying to get the values 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
}
}
how to do it properly ?
The syntax of your for each loop is incorrect. Since you are attempting to loop through a list of Rate objects, the type of res
should be a Rate, not a list of Rates:
for (Rate res : market.getQuery().getResults().getRate()) {
// code here
}
As an aside, you should consider checking for null values before dereferencing all of those child objects as you run the risk of throwing a NullPointerException at runtime.
这篇关于如何使用GSON解析JSON?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!