2017-03-20 55 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; 
}