簡體   English   中英

使用Java從文件轉換JSON對象

[英]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字符串加載到內存字符串中。

  • 通過在多次出現的'{'或'}'的外部結構中搜索'[',']'來檢查Array是否存在字符串
  • 一旦知道是數組還是單個對象,就可以將其作為對象引用傳遞給Jackson或GSON解析器
  • 在內存中創建JsonObject.class數組,例如List。 實際上,最好將此List包含在另一個類中。 說myJsonObjects並在其中包含一個列表。

讓我們看看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.

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