2017-04-02 42 views
0

我有這個結構的JSON文件中的地圖......嘗試讀取JSON文件到使用傑克遜

{"id":"1","name":"name","categories":["category1","category2","category3"],"type":"store"} 
{"id":"2","name":"name","categories":["category1","category2","category3"],"type":"store"} 

不具有一個鍵或逗號分隔每個對象。所以,當我使用此代碼...只有

File input = new File("test.json"); 
    ObjectMapper mapper = new ObjectMapper(); 
    Map obj = mapper.readValue(input, Map.class); 

obj變量在JSON文件這是有道理的,因爲它不知道,關鍵是什麼樣的第一道防線。

我試圖通過包裝的對象,像這樣將一個...

{ "Key": [ 

    {"id":"1","name":"name","categories":["category1","category2","category3"],"type":"store"}, 
    {"id":"2","name":"name","categories":["category1","category2","category3"],"type":"store"} 
] } 

包括添加逗號分隔每個作爲文件沒有任何逗號將它們分開。

雖然這個工程...

  1. 我有我有
  2. 文件大小上班多個JSON文件有點大,因此需要較長的時間,以增加他們「重點」包裝就像我在例子中所做的那樣。

我希望完全避免這種情況,但不確定是否可以。有沒有辦法使用原始格式讀取JSON文件到一個地圖,以便我可以根據需要過濾數據?

+1

如果你假設每一行都是一個對象,那麼什麼是包裝數組中的所有內容並添加分隔逗號?爲什麼不單獨分析每條線? –

+0

我需要通過類別(或其他字段)篩選它們,所以我需要它們的格式可以訪問然後處理。我試圖跟着另一個有類似上面的行的q/a把json對象放到地圖中,但是json目前所在的格式不會工作,除非我換行並加上逗號 – cpd1

+0

是的,它會的。每個JSON對象都可以被解析爲一張地圖(就像它們被包裝成一個JSON數組一樣),你可以用這些地圖做任何你想做的事情。 –

回答

1

有一個簡單的解決方案,不需要文件修改。逐行讀取文件,然後將單行文件傳送到您的ObjectMapper。您將獲得許多可以存儲在List,JsonArray或其他地圖中的地圖實例,您需要在代碼中創建這些實例。你的代碼看起來像:

ObjectMapper mapper = new ObjectMapper(); 
List<Map<String, Object> list = new ArrayList<>() 
try (
BufferedReader br = new BufferedReader(new FileReader(new File("test.json")))) { 
String line; 
while((line = br.readLine()) != null) { 
    Map obj = mapper.readValue(line, Map.class); 
    list.add(obj) 
} 
+0

好的。這是有道理的/應該工作。謝謝。我想有可能有其他方式來閱讀在JSON,但只是逐行迭代將工作 – cpd1

+0

如果您的整個文件是一個有效的JSON,那麼是的,你可以做到這一點。但是你的文件是一個單獨的JSON集合,所以你必須分別解析每個JSON –

+0

啊好吧。第一次處理JSON文件時,假設提供的是標準文件,直到我開始使用它爲止。再次感謝 – cpd1