2016-12-06 116 views
2

我正在尝试将json文件读入java HashMap。 这是我的JSON文件使用jackson将json文件读入HashMap

{ 
    "fieldA" : { 
     "Preis": "100,00 €", 
     "Text_de": "foo", 
     "Text_en": "bar", 
     "Materialnummer": "32400020" 
    }, 
    "fieldB" : { 
     "Preis": "90,00 €", 
     "Text_de": "jeha", 
     "Text_en": "bla", 
     "Materialnummer": "32400030" 
    } 
} 

我实际的问题是内容,所创建的地图是空的,FIELDA不会在我的测试情况下被发现。但读取文件时不会出现异常。

@Test 
public void readJsonFile() throws Exception { 
    File inFile = new File(
     getClass().getClassLoader().getResource("doPrefill6_17.json").getFile() 
    ); 
    assertTrue(inFile.exists()); 
    assertTrue(inFile.canRead()); 
    Map<String, IpadField> fieldMap = JsonCreator.readJsonFromFile(inFile); 
    assertNotNull(fieldMap); 
    assertTrue(fieldMap.containsKey("fieldA")); 
} 

实施

public static Map<String,IpadField> readJsonFromFile(File inFile) throws IOException { 
    Map<String, IpadField> map = new HashMap<>(); 
    ObjectMapper mapper = new ObjectMapper(); 
    byte[] json = Files.readAllBytes(inFile.toPath()); 

    mapper.readValue(json, new TypeReference<Map<String, IpadField>>(){}); 

    return map; 

} 

这里的POJO

public class IpadField { 

    @JsonIgnore 
    public String fieldname; 
    public String Text_de; 
    public String Text_en; 
    public String Preis; 
    public String Materialnummer; 

    public IpadField(){ 

    } 

    @Override 
    public String toString() { 
     return "IpadField{" + 
       "fieldname='" + fieldname + '\'' + 
       ", Text_de='" + Text_de + '\'' + 
       ", Text_en='" + Text_en + '\'' + 
       ", Preis='" + Preis + '\'' + 
       ", Materialnummer='" + Materialnummer + '\'' + 
       '}'; 
    } 

    public IpadField(String fieldname, String text_de, String text_en, 
     String preis, String materialnummer) { 
     this.fieldname = fieldname; 
     Text_de = text_de; 
     Text_en = text_en; 
     Preis = preis; 
     Materialnummer = materialnummer; 
    } 
} 

任何想法?

回答

6

您忘记了将序列化的值分配给地图。

map = mapper.readValue(json, new TypeReference<Map<String, IpadField>>(){}); 

希望它有帮助! :)

+0

OMG,facepalm ....谢谢,我没有任何借口:-) –

+0

没问题,它发生。随时接受我的答案:P –