2017-11-18 231 views
0

我想要消耗與傑克遜註釋Java中使用RestTemplate JSON響應與許多JsonProperty名JSON響應,我有許多有名稱的屬性,像這樣的資源:我怎麼能消耗在Java

{ 
     -name1:{ 
      id:2, 
      price:12, 
      name:"Bob: 
     }, 
     -name2:{ 
      id:111, 
      price:1.1, 
      name:"Ron: 
     }, 
     -name3:{ 
      id:10, 
      price:33, 
      name:"jhon: 
     }, 
    } 

和這個名單繼續這樣下去。 這是我如何得到的實體之一,像名1對象代碼:

public class Class1 { 
    private RestTemplate restTemplate; 
    private String url = "https://url.com/api"; 
    private Response response; 
    private Market market ; 
    public class1(){ 
     restTemplate = new RestTemplate(); 
     response = restTemplate.getForObject(url,Response.class); 
    } 
    @Override 
    public Market getResults() { 
     market = response.getResult(); 
     System.out.println(Market); 
     return null; 
    } 
} 

和響應類是像這樣:

@JsonIgnoreProperties(ignoreUnknown = true) 
@Getter 
@Setter 
@NoArgsConstructor 
public class Response { 
    @JsonProperty("name1") 
    private Market result; 
} 

我怎樣才能得到所有這些元素的數組或ArrayList? 這個API來自第三方網站,並且在Json響應中存在許多實體。 在此先感謝。

+0

我已經完成了相同的用例 - 使用Spring'RestTemplate'來使用Json服務 - 如果您嘗試使用的Json與您發佈的Json完全相同,則它們是你正在嘗試使用的服務。所以我的目的是:如果你的製片人不能生產標準的Json,那麼更正可能是生產者方,而不是消費方。「 – Zorglube

回答

0

所以在上面的Json中,它不是一個數組,而是一個鍵值對的列表。

這是一個數組,看起來像在JSON:

{ 
    marketResults: [ 
     { 
      id:2, 
      price:12, 
      name:"Bob: 
     }, 
     { 
      id:111, 
      price:1.1, 
      name:"Ron: 
     }, 
     { 
      id:10, 
      price:33, 
      name:"jhon: 
     } 
    ] 
    } 

那麼你可以做的是:

public class Response { 
    private List<Market> marketResults; 
} 

但你的例子是地圖,你需要使用MAP

public class Response { 
    private Map<String, Object > marketResults; 
} 

該職位實際上與你相似:Reading JSON map structure via spring boot

+0

謝謝! 現在一旦我使用地圖,它就會很棒。 –

0

如果您可以使用對本用例具有本機支持的Gson庫。 保持您的代碼清潔並鍵入。

@Getter 
@Setter 
public class Response { 
    @SerializedName(value = "name1", alternate={"name2","name3"}) 
    private Market result; 
} 

@SerializedName@JsonProperty相當於GSON。