簡體   English   中英

需要幫助解決傑克遜的問題

[英]Need help troubleshooting with Jackson

我有一個 HashMap,我在 json 文件的靜態塊中初始化一次。 然后我使用我的本地 HashMap 來保存用戶請求。

static {
  TypeFactory typeFactory = mapper.getTypeFactory();
  MapType mapType = typeFactory.constructMapType(ConcurrentHashMap.class, String.class, GooglePlayGame.class);
  try {
       games = mapper.readValue(new File("games.json"), mapType);
        } catch (IOException e) {
          log.error(e.getMessage());
        }
    }

當我決定停止應用程序並再次啟動它時,我可以向該地圖添加新的“鍵值”對,但是當我嘗試將更改附加到我的 json 文件中時,json 文件中已經存在的所有內容都將被復制 +新值。 這段代碼:

try(JsonGenerator g = mapper.getFactory().createGenerator(
                  new PrintWriter(new BufferedWriter(new FileWriter(new File("games.json"), true))))) {
    mapper.writeValue(g, games);
    } catch (IOException e) {
      log.error(e.getMessage());
    }

我明白為什么會發生這種情況(因為每次新發布都會進行靜態初始化,然后我一次又一次地寫入所有 hashmap 文件),但我不知道如何解決這個問題。 我想將新對附加到現有的 json 文件中。

例如:添加第一個請求,一切正常:

{"Machinarium":
   {"Title":"Machinarium",
    "Updated":"28 February, 2019",
    "Version":"2.5.6","Requirements":"4.1,
     "Contacts":"support@amanita-design.net"
}

然后我重新啟動應用程序並收到另一個請求,我的 json 文件現在看起來像:

{"Machinarium":
   {"Title":"Machinarium",
    "Updated":"28 February, 2019",
    "Version":"2.5.6","Requirements":"4.1,
     "Contacts":"support@amanita-design.net",
....
},
{"Machinarium":
   {"Title":"Machinarium",
    "Updated":"28 February, 2019",
    "Version":"2.5.6","Requirements":"4.1,
     "Contacts":"support@amanita-design.net",
....
},
"Samorost 3":
   {"Title":"Samorost 3",
    "Updated":"November 14, 2019",
     "Version":"1.0",
     "Requirements":"4.3,
...}

如您所見,在此處重復。

所以目標是:創建 HashMap -> 獲取用戶請求 -> 將此請求(對“鍵值”)寫入本地哈希圖 -> 將哈希圖(或每對單獨?嗯)寫入 json 文件。 然后當應用程序再次啟動時:使用保存的請求從這個 json 文件初始化 hashmap -> 獲取新用戶請求 -> 將新請求添加到 json 文件。

所以有點我需要將每一對一一寫入文件(不是所有地圖),但是如何?

最終,您的問題在這里: new FileWriter(new File("games.json"), true))

FileWriter構造函數是FileWriter(File file, boolean append)因此您每次寫入時都將數據附加到該文件。

你想要的只是FileWriter(File file) ,它默認覆蓋文件。 這假設您的games地圖始終是最新的,並且所有數據都在內存中。

這有點低效率,因為每次進行更改時您都會覆蓋整個文件,但這似乎不是很多數據,所以我認為這不應該是一個問題。 如果事實證明這是頻繁更新的大量數據,您可能需要考慮使用數據庫而不是 JSON 文件。

暫無
暫無

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

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