2013-09-05 54 views
1

我想將json從文本文件轉換爲java對象。將json從文件轉換爲java對象

我已經嘗試了兩個傑克遜庫,我把依賴關係和什麼不是。我的json文件同時具有駱駝大小寫和下劃線,並且在運行我的程序時導致錯誤。以下是我在與gson庫相關時使用的代碼,它不會執行任何操作,輸出與使用或不使用代碼時的輸出相同。

java.net.URL url = this.getClass().getResource("/test.json"); 
      File jsonFile = new File(url.getFile()); 
      System.out.println("Full path of file: " + jsonFile); 
try 
     { 

     BufferedReader br = new BufferedReader(new FileReader("/test.json")); 

     // convert the json string back to object 
     DataObject obj = gson.fromJson(br, DataObject.class); 

     System.out.println(obj); 

     } catch (IOException e) 
     { 
     e.printStackTrace(); 
     } 

現在我還嘗試了傑克遜庫。下面是我用

java.net.URL url = this.getClass().getResource("/test.json"); 
     File jsonFile = new File(url.getFile()); 
     System.out.println("Full path of file: " + jsonFile); 

ObjectMapper mapper = new ObjectMapper(); 
     mapper.setPropertyNamingStrategy(PropertyNamingStrategy.CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES); 
     InputStream is = Test_Project.class.getResourceAsStream("/test.json"); 
     SampleDto testObj = mapper.readValue(is, SampleDto.class); 
     System.out.println(testObj.getCreatedByUrl()); 

我不知道該怎麼做的代碼,

+2

你得到了什麼錯誤? – nwaltham

+0

Add you'test.json' and DTOs – Ilya

回答

8

這個簡單的例子就像一個魅力:
的DTO

public class SampleDTO 
{ 
    private String name; 
    private InnerDTO inner; 
    // getters/setters 
} 

public class InnerDTO 
{ 
    private int number; 
    private String str; 
    // getters/setters 
} 

GSON

BufferedReader br = new BufferedReader(new FileReader("/tmp/test.json")); 
    SampleDTO sample = new Gson().fromJson(br, SampleDTO.class); 

傑克遜

InputStream inJson = SampleDTO.class.getResourceAsStream("/test.json"); 
    SampleDTO sample = new ObjectMapper().readValue(inJson, SampleDTO.class); 

JSONtest.json

{ 
    "name" : "Mike", 
    "inner": { 
     "number" : 5, 
     "str" : "Simple!" 
    } 
} 
+1

Ilya,你可以通過展示如何將文件中的json數組轉換爲java對象集合來改善你的優秀答案;-) –

+0

如何獲得test.json的相對路徑Java的? –