2016-12-06 1 views
2

json 파일을 Java HashMap으로 읽으려고합니다. 이 생성 된지도가 비어 있고 fieldA 내 테스트 케이스에서 찾을 수없는 것, 내 JSON 파일jackson으로 HashMap에 json 파일 읽기

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

내 실제 문제의 내용이다. 그러나 파일을 읽는 동안 예외가 발생하지 않습니다.

@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 –