簡體   English   中英

嘗試使用Jackson將JSON文件讀入Map

[英]Trying to read a JSON file into a Map using Jackson

我有一個具有這種結構的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. 我必須使用多個json文件
  2. 文件大小有點大,因此像我在示例中所做的那樣,添加它們需要很長時間。

我希望完全避免這種情況,但不確定是否可以。 有沒有一種方法可以使用原始格式將json文件讀取到Map中,以便隨后可以根據需要過濾數據?

有一個簡單的解決方案,不需要修改文件。 逐行讀取文件,然后將一行輸入到ObjectMapper 您將獲得許多Map實例,可以將它們存儲在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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM