2017-05-05 3 views
0

Ich habe folgenden JSON-String JSON Arrays konvertieren:wie ohne Schlüssel zu einem Java-Objekt mit Jackson

[512768,[1493990100000,1628.4,1628.2,1628.4,1628,7.6513558]] 

Ich habe keine Ahnung, wie es in ein Java-Objekt zu verwandeln Jackson verwenden, I don‘ Ich weiß wirklich, wie man es macht, wenn es keine Schlüssel gibt. Ofcourse weiß ich, dass ich eine objectMapper etc erstellen müssen ...

objectMapper.readValue(candle, CandleChannel.class); 

Aber was ich meine, ist, ich habe keine Ahnung, wie ich die Klasse mit Anmerkungen versehen sollte. Ich habe versucht, viele Dinge, aber ich halte nur einen Fehler immer mir zu sagen, dass ich es nicht analysieren kann:

com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of application.model.CandleChannel out of START_ARRAY token 
at [Source: [512768,[1493990100000,1628.4,1628.2,1628.4,1628,7.6513558]]; line: 1, column: 1] 

Also habe ich nur gefragt, wie ich die Klasse mit Anmerkungen versehen sollte? Kann mir jemand helfen? Dies ist der Code, den ich bisher habe:

public class CandleChannel { 

    @JsonProperty 
    private Long channelId; 
    @JsonProperty 
    private List<Candle> candles; 

    public CandleChannel() { 
    } 

    public Long getChannelId() { 
     return channelId; 
    } 

    public void setChannelId(Long channelId) { 
     this.channelId = channelId; 
    } 

    public List<Candle> getCandles() { 
     return candles; 
    } 

    public void setCandles(List<Candle> candles) { 
     this.candles = candles; 
    } 
} 

Und das innere Objekt:

@JsonFormat(shape= JsonFormat.Shape.ARRAY) 
public class Candle { 

    @JsonProperty 
    private Integer mts; 
    @JsonProperty 
    private Float open; 
    @JsonProperty 
    private Float close; 
    @JsonProperty 
    private Integer high; 
    @JsonProperty 
    private Float low; 
    @JsonProperty 
    private Float volume; 

    public Candle() { 
    } 

    public Integer getMts() { 
     return mts; 
    } 

    public void setMts(Integer mts) { 
     this.mts = mts; 
    } 

    public Float getOpen() { 
     return open; 
    } 

    public void setOpen(Float open) { 
     this.open = open; 
    } 

    public Float getClose() { 
     return close; 
    } 

    public void setClose(Float close) { 
     this.close = close; 
    } 

    public Integer getHigh() { 
     return high; 
    } 

    public void setHigh(Integer high) { 
     this.high = high; 
    } 

    public Float getLow() { 
     return low; 
    } 

    public void setLow(Float low) { 
     this.low = low; 
    } 

    public Float getVolume() { 
     return volume; 
    } 

    public void setVolume(Float volume) { 
     this.volume = volume; 
    } 
} 

Es muss einen Weg geben, aber ich bin nicht sicher, wie das Objekt in ein Java TRANSFOR.

+0

Was erwarten Sie '@JsonProperty ("CHANNEL_ID")' zu erreichen? – shmosel

+0

In der Online-API sehe ich, dass sie dieses Feld in der json channel_id nennen Sie denken, dass ich das nicht brauche? – sfrj

+0

Ich sehe keine Feldnamen in Ihrem Beispiel-JSON. Wie soll Jackson sie zusammenbringen? – shmosel

Antwort

-1

Klassendefinition erwartet eine Probe JSON im Format:

{ 
    "CHANNEL_ID": 389251, 
    "MTS": 1494001560000, 
    "OPEN": 1566, 
    "CLOSE": 1565.2, 
    "HIGH": 1566.1, 
    "LOW": 1565.1, 
    "VOLUME": 126.84178235 
} 

Blick auf die akzeptierte Antwort in diesem Beitrag: Java: FasterXML/jackson deserialize array without keys

+0

Dies ist keine gültige Antwort, weil ich nicht den Eingang json ändern kann ... Es scheint ein äußeres Objekt und innerhalb einer Reihe von Kerzen zu sein. Ich muss den Java-Code nicht die Eingabe ändern. Irgendeine Idee wie. Hinweis Ich habe die Frage aktualisiert – sfrj

+0

Ich stimme zu. Ich erkläre, woher der Fehler kommt. Ich weiß nicht, wie JSON-Arrays zu konvertieren, ohne einen Schlüssel zu einem Java-Objekt mit Jackson. Ich bin mir nicht sicher, ob es möglich ist. – toongeorges

+0

Ok ... Ja, genau das brauche ich. Um es zu tun, ohne ID – sfrj

Verwandte Themen