使用Java从文件转换JSON对象

时间:2015-03-10 15:08:28

标签: java arrays json jackson

我有一个JSON文件,不知道数据如何在其中,也不知道数据的结构。 唯一已知的是它将具有JSON对象数组或单个JSON对象。

我需要从文件中获取每个对象并将其作为单独的项目存储。如果文件中包含对象数组,我应该得到一个JSON字符串数组,我可以将其存储在DB中。 基本上,我需要读取此文件并从中分离出每个JSON对象,并将其作为字符串存储在DB中。

其中一种方法是使用JACKSON ObjectMapper并将这些项目作为键值对分配给Hashmap,但我不确定如何完成它如果文件中有JSON对象列表。< / p>

示例JSON文件:

 [
   {
     "name":"Bob",
     "type":"Email",
     "from":"a@a.com",
     "to":"b@B.com",
     "attachments":[...],
     .
     .
     .
   }
 ]

3 个答案:

答案 0 :(得分:2)

您知道JSON具有的Object结构(让它成为Array还是单个)?如果是,


首先将文件中的json字符串加载到内存字符串中。

  • 通过搜索&#39; [&#39;,&#39;]&#39;检查字符串是否存在。在多次出现的&#39; {&#39;或&#39;}&#39;
  • 一旦知道您是否有数组或单个对象,就可以将其作为对象引用传递给Jackson或GSON解析器
  • 在内存中创建JsonObject.class数组,表示List。实际上,将此List包含在另一个类中更好。说myJsonObjects并在里面有一个List。

让我们看看GSON解析器(谷歌),虽然杰克逊也可以用于类似的实现

  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

答案 1 :(得分:1)

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>>() {});

杰克逊的文档相当不错 - 给它一个坚实的通读应该肯定有帮助。这是一个很好的五分钟教程:http://wiki.fasterxml.com/JacksonInFiveMinutes

答案 2 :(得分:0)

我更喜欢使用Gson:

Gson gson;
Map<String, Object>parameters=gson.fromJson(myString);

其余的是迭代地图,我希望帮助你