簡體   English   中英

如何將JSON文件加載到每個記錄具有唯一名稱的Java中?

[英]How to load a JSON file into java that has unique name for each record?

例如,我的JSON文件如下所示;

{
  "Test1": {
  "A": {},
  "B": "1",
  "C": "2",
  "D": "3"
 },
  "Test2": {
  "A": {},
  "B": "4",
  "C": "5",
  "D": "6"
 },
  "Test3": {
  "A": {},
  "B": "7",
  "C": "8",
  "D": "9"
 },
  "Test4": {
  "A": {},
  "B": "10",
  "C": "11",
  "D": "12"
 }

 ...
 ...
}

如果該文件僅包含幾條記錄,這本來就很簡單,但就我而言,我正在處理成千上萬條記錄。 對於更簡單的版本,我使用了gson庫,但是不確定如何將具有每個記錄唯一名稱的JSON文件加載到Java中。

***************更新***********************************

現在,我設法將其原始讀取並映射數據。 但是,仍然有一個小問題。

這是我用來映射的代碼

ObjectMapper mapper = new ObjectMapper();
File jsonFile = new File(jsonFilePath);
        Map<String, Object> mapObject = mapper.readValue(jsonFile,
                new TypeReference<Map<String, Object>>() {
                });

System.out.println(mapObject.get("Test1"));

我得到了低於結果的結果,這很好。 但是,不確定如何獲取地圖“值”內的數據。

{A = {},B = 1,C = 2,D = 3}

我在下面嘗試重新映射,但是按預期失敗了,因為鍵不再被雙引號包圍了(見上文)!

Map<String, Object> nestedObject = mapper.readValue(
                mapObject.get("Test1").toString(),
                new TypeReference<Map<String, Object>>() {
                });

如果你知道你的對象都含有相同的密鑰A,B,C和d,那么你可以創建一個映射單一對象的

class MyEntry {
  /**
   * You've tagged the question "gson" but your example code uses Jackson so I've
   * written this class with Jackson annotations rather than Gson ones.
   */
  @JsonProperty("A")
  public Object a; // or a more specific type if you know one

  @JsonProperty("B")
  public String b;

  @JsonProperty("C")
  public String c;

  @JsonProperty("D")
  public String d;
}

然后將JSON解組為Map<String, MyEntry>

Map<String, MyEntry> mapObject = mapper.readValue(jsonFile,
    new TypeReference<Map<String, MyEntry>>() {
    });

System.out.println(mapObject.get("Test1").b); // prints 1

暫無
暫無

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

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