[英]Converting JSON Object(s) from file using Java
我有一個JSON文件,不知道其中的數據如何,也不知道數據的結構。 唯一已知的是它將具有JSON對象數組或單個JSON對象。
我需要從文件中獲取每個對象,並將其存儲為單獨的項目。 對於文件中的對象數組,我應該獲取一個可以存儲在數據庫中的JSON字符串數組。 基本上,我需要讀取此文件並從中分離出每個JSON對象,並將其作為字符串存儲在DB中。
一種方法是使用JACKSON ObjectMapper並將這些項目作為鍵值對分配給Hashmap,但是我不確定如果文件中有JSON對象列表,該怎么做。
樣本JSON文件:
[
{
"name":"Bob",
"type":"Email",
"from":"a@a.com",
"to":"b@B.com",
"attachments":[...],
.
.
.
}
]
您是否知道JSON具有的Object結構(讓它成為Array或一個)? 如是,
首先將文件中的json字符串加載到內存字符串中。
讓我們看看GSON解析器(由Google提供),盡管Jackson也可以用於類似的實現中
Gson gson = new Gson();
if(isArray){
myJsonObjects jsonArray = gson.fromJson(jsonStringFromFile,myJsonObjects );
}
else{
gson.fromJson(jsonStringFromFile,JsonObject);
}
http://google-gson.googlecode.com/svn-history/trunk/gson/docs/javadocs/com/google/gson/Gson.html
Jackson是我最喜歡的JSON-to-POJO庫。 從哪里(從URL或從文件系統)加載JSON其實並不重要,有幾個輸入源的處理程序。
這是一個例子:
Map<String,Object> userData = mapper.readValue(new File("user.json"), Map.class);
至於要解析的JSON結構數量未知,首先想到的是為每個期望的類型都有一個映射器。 然后,您可以將解析代碼包裝在try / catch塊中,這樣,如果在遇到意外格式時傑克遜給您的異常導致第一個失敗,則可以嘗試下一種格式,依此類推。
如果您只是嘗試一般地解析事先不知道其結構的JSON,則可以嘗試執行以下操作:
mapper.readValue(jsonString, new TypeReference<List<EntryType>>() {});
Jackson的文檔非常好-對其進行全面的閱讀肯定會有所幫助。 這是一個很好的五分鍾教程: http : //wiki.fasterxml.com/JacksonInFiveMinutes
我更喜歡使用Gson:
Gson gson;
Map<String, Object>parameters=gson.fromJson(myString);
剩下的就是迭代地圖,希望對您有幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.