2017-04-11 86 views
0

我有一個JSON結構是這樣的:如何解析JSON陣列成POJO

{ 
    "text" : "MVA/Transport. Greater Hume (Hume Hwy, Holbrook, NSW 2644) at 7 Mar 2017 03:58 #NSWRFS #MVATransport", 
    "user" : { 
     "id" : "4721717942", 
     "name" : "NSW Fire Updates" 
    }, 
    "lang" : "en", 
    "coordinates" : { 
     "coordinates" : [147.273696, -35.785469], 
     "type" : "Point" 
    }, 
    "created_at" : "Mon Mar 06 17:29:31 +0000 2017" 
} 

我無法解析coordinates對象內部coordinates陣列。

public class ParsingTweet { 

    public static void main(String[] args) throws IOException { 
     assert args != null & args.length > 0; 
     List<Tweet> tweets = new ArrayList<>(); 
     ObjectMapper mapper = new ObjectMapper(); 
     try (BufferedReader reader = new BufferedReader(new FileReader("tweets.json"))) { 
      String line; 
      while ((line = reader.readLine()) != null) { 
       tweets.add(mapper.readValue(line, Tweet.class)); 
      } 
     } 
     System.out.println(tweets); 
    } 

} 

其中coordinates打印爲:代替

coordinates = ClassPojo [type = Point, coordinates = [Ljava.lang.Double;@1810399e]] 

coordinates = ClassPojo [type = Point, coordinates = [147.273696, -35.785469]] 

這裏是我的POJO:

@JsonIgnoreProperties(ignoreUnknown = true) 
public class Tweet { 

    private String text; 
    private String created_at; 
    private User user; 
    private Coordinates coordinates; 

    public Tweet(){ 
    } 

    public String getText() 
    { 
     return text; 
    } 
    public void setText(String text) 
    { 
     this.text = text; 
    } 
    public String getCreated_at() 
    { 
     return created_at; 
    } 
    public void setCreated_at(String created_at) 
    { 
     this.created_at = created_at; 
    } 
    public User getUser() 
    { 
     return user; 
    } 
    public void setUser(User user) 
    { 
     this.user = user; 
    } 
    public Coordinates getCoordinates() 
    { 
     return coordinates; 
    } 
    public void setCoordinates(Coordinates coordinates) 
    { 
     this.coordinates = coordinates; 
    } 

    @Override 
    public String toString() 
    { 
     return "[text = "+text+", created_at = "+created_at+", user = "+user+", coordinates = "+coordinates+"]"; 
    } 
} 



public class Coordinates { 
    private String type; 
    private String[] coordinates; 
    public String getType() 
    { 
     return type; 
    } 
    public void setType (String type) 
    { 
     this.type = type; 
    } 
    public String[] getCoordinates() 
    { 
     return coordinates; 
    } 
    public void setCoordinates (String[] coordinates) 
    { 
     this.coordinates = coordinates; 
    } 

    @Override 
    public String toString() 
    { 
     return "ClassPojo [type = "+type+", coordinates = "+coordinates+"]"; 
    } 
} 
+0

哪裏是你的解析代碼? – ataulm

+0

我剛加了他們 – Kutam

+0

和Tweet類? – ataulm

回答

0

可以嘗試CoordinateString[]更改爲List<String>

它看起來像它的讀它作爲一個Double[]?雖然我不明白爲什麼因爲你的Coordinate類有一個String[]字段。


考慮,如果你有JSON陣列值爲1或2周以上的價值觀 - 解析器會愉快地分析它爲Java列表或數組,即使它們是無效的座標。

而不是解析到double[]String[]List<String>,它會更好,如果你有一個Coordinate POJO具有double latitudedouble longitude作爲屬性。你可以用你的JSON解析庫來做到這一點,或者你可以把它看作API模型的第一個轉換分析,然後再一次轉換到你的領域模型。

+0

不應該是一個雙?因爲結果應該是「座標= 147.273696,-35.785469]」 – Kutam

+0

我不確定如何您使用的解析庫(傑克遜?)的作品,它是否能夠正確地推斷出類型。 – ataulm

+0

實際上解決了這個問題 – Kutam

0

要打印一個數組...所以你想正確地做到這一點

@Override 
public String toString() 
{ 
    return + Coordinates.class.getSimpleName() 
     + " [type = " + type 
     + ", coordinates = " + Arrays.toString(coordinates) 
     + "]"; 
}