2016-12-06 120 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 –