2017-03-20 57 views
0

我正在編寫一個程序,我需要從json文件獲取一些數據,其內容如下所示。使用jackson打印json數組

{ 
    "culture": "en-us", 
    "subscription_key": "myKey", 
    "description": "myDescription", 
    "name": "myName", 
    "appID": "myAppId", 
    "entities": [ 
     { 
      "name": "Location" 
     }, 
     { 
      "name": "geography" 
     } 
    ] 
} 

使用在線工具我創建了相同的POJO。他們如下。

ConfigDetails POJO的

package com.config; 

import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import com.fasterxml.jackson.annotation.JsonAnyGetter; 
import com.fasterxml.jackson.annotation.JsonAnySetter; 
import com.fasterxml.jackson.annotation.JsonIgnore; 
import com.fasterxml.jackson.annotation.JsonInclude; 
import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.annotation.JsonPropertyOrder; 

@JsonInclude(JsonInclude.Include.NON_NULL) 
@JsonPropertyOrder({ 
    "culture", 
    "subscription_key", 
    "description", 
    "name", 
    "appID", 
    "entities" 
}) 
public class ConfigDetails { 

    @JsonProperty("culture") 
    private String culture; 
    @JsonProperty("subscription_key") 
    private String subscriptionKey; 
    @JsonProperty("description") 
    private String description; 
    @JsonProperty("name") 
    private String name; 
    @JsonProperty("appID") 
    private String appID; 
    @JsonProperty("entities") 
    private List<Entity> entities = null; 

    @JsonProperty("culture") 
    public String getCulture() { 
     return culture; 
    } 

    @JsonProperty("culture") 
    public void setCulture(String culture) { 
     this.culture = culture; 
    } 

    @JsonProperty("subscription_key") 
    public String getSubscriptionKey() { 
     return subscriptionKey; 
    } 

    @JsonProperty("subscription_key") 
    public void setSubscriptionKey(String subscriptionKey) { 
     this.subscriptionKey = subscriptionKey; 
    } 

    @JsonProperty("description") 
    public String getDescription() { 
     return description; 
    } 

    @JsonProperty("description") 
    public void setDescription(String description) { 
     this.description = description; 
    } 

    @JsonProperty("name") 
    public String getName() { 
     return name; 
    } 

    @JsonProperty("name") 
    public void setName(String name) { 
     this.name = name; 
    } 

    @JsonProperty("appID") 
    public String getAppID() { 
     return appID; 
    } 

    @JsonProperty("appID") 
    public void setAppID(String appID) { 
     this.appID = appID; 
    } 

    @JsonProperty("entities") 
    public List<Entity> getEntities() { 
     return entities; 
    } 

    @JsonProperty("entities") 
    public void setEntities(List<Entity> entities) { 
     this.entities = entities; 
    } 
} 

實體PO​​JO

package com.config; 

import java.util.HashMap; 
import java.util.Map; 
import com.fasterxml.jackson.annotation.JsonAnyGetter; 
import com.fasterxml.jackson.annotation.JsonAnySetter; 
import com.fasterxml.jackson.annotation.JsonIgnore; 
import com.fasterxml.jackson.annotation.JsonInclude; 
import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.annotation.JsonPropertyOrder; 

@JsonInclude(JsonInclude.Include.NON_NULL) 
@JsonPropertyOrder({ 
    "name" 
}) 
public class Entity { 

    @JsonProperty("name") 
    private String name; 

    @JsonProperty("name") 
    public String getName() { 
     return name; 
    } 

    @JsonProperty("name") 
    public void setName(String name) { 
     this.name = name; 
    } 
} 

,我使用下面的代碼從文件打印值。

MainClass obj = new MainClass(); 
     ObjectMapper mapper = new ObjectMapper(); 

     try { 

      // Convert JSON string from file to Object 
      ConfigDetails details = mapper.readValue(new File("properties.json"), ConfigDetails.class); 
      System.out.println(details.getAppID()); 

      List entities = details.getEntities(); 
      for (Object entity : entities) { 
       System.out.println(entity.toString()); 
      } 
     } catch (JsonGenerationException e) { 
      e.printStackTrace(); 
     } catch (JsonMappingException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

是我得到的輸出是

MyAppId 
[email protected] 
[email protected] 

在這裏,而不是打印的可用價值,它是印刷哈希碼。請告訴我如何打印這些值。

感謝

回答

1

剛剛訪問getter方法entity.getName()這樣和使用的Entity代替Object

MainClass obj = new MainClass(); 
    ObjectMapper mapper = new ObjectMapper(); 

    try { 

     // Convert JSON string from file to Object 
     ConfigDetails details = mapper.readValue(new File("properties.json"), ConfigDetails.class); 
     System.out.println(details.getAppID()); 

     List entities = details.getEntities(); 
     for (Entity entity : entities) { 
      System.out.println(entity.getName()); 
     } 
    } catch (JsonGenerationException e) { 
     e.printStackTrace(); 
    } catch (JsonMappingException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
0

您還沒有確定這是什麼意思的「實體」轉換爲一個字符串,所以Java正在回退到它的默認方式(這是打印類名稱和對象ID)。

當你說你想讓它「打印可用的值」時,你是什麼意思?在這種情況下,這些值是Entity類型的Java對象,並且您基本上正在打印這些值。

您可以通過重寫toString()方法來控制對象的字符串表示形式。例如,您可以將以下內容添加到實體類:

@Override 
public String toString() { 
    return "An entity named " + name; 
}