验证并加载文件中的JSON数据

时间:2015-03-09 13:19:35

标签: java json jackson

我需要从包含学生数据的单个或JSON表示数组的文件中加载所有学生实体 如果Student实体的模式是静态的,那么我可以使用:

ObjectMapper mapper = new ObjectMapper();
List<Student> studentList = mapper.readValue( file, Student.class );  

以上代码获取所有有效的学生条目。

但是如果Student实体的模式没有预定义的类并且作为可以动态更新的JSON文件加载,那么我们如何从文件中获取学生条目列表?

- Update--
学生模式存储在Schema表中的一列中,如下所示:

{ 
 "name":"...",
 "age":?
}  

用户上传一个包含学生JSON条目数组的文件:

[{
  "name":"Abc",
  "age":10
},
{
  "name":"Def",
  "age":15
}]

在Backend中,我应该阅读这个文件,并将json结构与Schema表中为Student定义的模式进行比较,如果匹配,那么它是有效的学生JSON,我需要将它作为JSON存储在Student表中。

现在管理员可以进入并更新学生的架构,例如:

{ 
 "name":"...",
 "age":?,
 "gender":".."
},

因此,下次用户上传包含学生数据的文件时,必须根据上述模式对其进行验证并保存。

先谢谢

3 个答案:

答案 0 :(得分:0)

查看json-simple

你可以做类似的事情 -

JSONObject jsonObj = (JSONObject)new JSONParser().parse("json string");
System.out.println(jsonObj.get("studentName or some field"));

答案 1 :(得分:0)

如果您正在使用杰克逊,那么您可以使用树而不是POJO - 这可以很好地应对动态模型。您使用ObjectNode s。

跳跃点:

String json = "{\"name\":\"...\",\"age\":18,\"gender\":\"..\"}";

ObjectMapper mapper = new ObjectMapper();
ObjectNode tree = (ObjectNode)mapper.readTree(json);

答案 2 :(得分:0)

将其读入Jackson JsonNode对象,如下所示。它为您提供了一个树状结构,每个节点都作为JsonNode。

ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readValue(jsonData, JsonNode.class);

然后,使用findValue()获取所需的属性节点,如下所示:

JsonNode node = rootNode.findValue(propertyName); 

您可以检索节点值node.longValue()或node.intValue()或node.booleanValue()等。