2017-07-25 3 views
0

Je cette JSONcartographie modèle de données de JSON avec Gson renvoie null

{ 
"Meta Data": { 
    "1: Symbol": "stock", 
    "2: Indicator": "SMA", 
    "3: Last Refreshed": "2017-07-25 09:50:00", 
    "4: Interval": "daily", 
    "5: Time Period": 3, 
    "6: Series Type": "open", 
    "7: Time Zone": "US/Eastern" 
}, 
"Technical Analysis: SMA": { 
    "2017-07-25 09:50:00": { 
     "SMA": "266.6264" 
    }, 
    "2017-07-24": { 
     "SMA": "265.9137" 
    }, 
    "2017-07-21": { 
     "SMA": "265.3237" 
    } 
}} 

et j'ai cartographié ces classes afin d'obtenir le modèle rempli directement avec bibliothèque gson (Stock, MetaData, TechAnalysis, DayValue):

public class Stock { 

private MetaData metaData; 
private TechAnalysis tech; 


public MetaData getMetaData() { 
    return metaData; 
} 
public void setMetaData(MetaData metaData) { 
    this.metaData = metaData; 
} 
public TechAnalysis getTech() { 
    return tech; 
} 
public void setTech(TechAnalysis tech) { 
    this.tech = tech; 
}} 




public class MetaData { 

private String symbol; 
private String indicator; 
private Date lastRefreshed; 
private String interval; 
private Integer period; 
private String zone; 



public String getSymbol() { 
    return symbol; 
} 
public void setSymbol(String symbol) { 
    this.symbol = symbol; 
} 
public String getIndicator() { 
    return indicator; 
} 
public void setIndicator(String indicator) { 
    this.indicator = indicator; 
} 
public Date getLastRefreshed() { 
    return lastRefreshed; 
} 
public void setLastRefreshed(Date lastRefreshed) { 
    this.lastRefreshed = lastRefreshed; 
} 
public String getInterval() { 
    return interval; 
} 
public void setInterval(String interval) { 
    this.interval = interval; 
} 
public Integer getPeriod() { 
    return period; 
} 
public void setPeriod(Integer period) { 
    this.period = period; 
} 
public String getZone() { 
    return zone; 
} 
public void setZone(String zone) { 
    this.zone = zone; 
}} 




public class TechAnalysis { 


private List<DayValue> dayValuesList; 

public List<DayValue> getDayValuesList() { 
    return dayValuesList; 
} 

public void setDayValuesList(List<DayValue> dayValuesList) { 
    this.dayValuesList = dayValuesList; 
}} 


public class DayValue { 

private String value; 

public String getValue() { 
    return value; 
} 
public void setValue(String value) { 
    this.value = value; 
}} 

Mon code pour cartographier le modèle sur la réponse JSON est la suivante:

public static Stock getStock(String json){ 

    Gson gson = new Gson(); 
    return gson.fromJson(json, Stock.class); 
} 

mais l'objet Stock retourne toujours NULL

+0

Votre paramètre 'json' est-il un stringify json' format' valide? vérifie ça. – Beginner

Répondre

0

Le modèle de classe et le JSON ne sont pas compatibles. Par exemple, ce JSON ...

"Meta Data": { 
    "1: Symbol": "stock", 
    "2: Indicator": "SMA", 
    "3: Last Refreshed": "2017-07-25 09:50:00", 
    "4: Interval": "daily", 
    "5: Time Period": 3, 
    "6: Series Type": "open", 
    "7: Time Zone": "US/Eastern" 
} 

... implique une classe avec un attribut nommé Meta Data (ce qui est un nom d'attribut valide) et la classe « Meta Data », il faudrait les attributs nommés 1: Symbol, 2: Indicator etc (encore une fois, les noms d'attributs invalides).

Le modèle de classe que vous avez défini serait compatible avec cette JSON:

{ 
    "metaData": { 
    "symbol": "stock", 
    "indicator": "SMA", 
    "lastRefreshed": "2017-07-25 09:50:00", 
    "interval": "daily", 
    "period": 3, 
    "zone": "US/Eastern" 
    }, 
    "techAnalysis": { 
    "dayValuesList": [ 
     { 
     "value": "266.6264", 
     "dateTime": "2017-07-25 09:50:00" 
     } 
    ] 
    } 
} 

Bien que même cela nécessiterait l'ajout d'un attribut dateTime-DayValue.