我有一个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":[...],
.
.
.
}
]
答案 0 :(得分:2)
您知道JSON具有的Object结构(让它成为Array还是单个)?如果是,
首先将文件中的json字符串加载到内存字符串中。
让我们看看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);
其余的是迭代地图,我希望帮助你