我需要从包含学生数据的单个或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":".."
},
因此,下次用户上传包含学生数据的文件时,必须根据上述模式对其进行验证并保存。
先谢谢
答案 0 :(得分:0)
你可以做类似的事情 -
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()等。