[英]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.