Jackson Json访问JsonNode属性名称

时间:2014-09-29 20:19:11

标签: java json jackson

我有这样的架构:

{
  "type" : "object",
  "$schema" : "http://json-schema.org/draft-03/schema#",
  "id" : "urn:jsonschema:com:vlashel:dto:UserDto",
  "description" : "this is the top description",
  "title" : "this is the top title",
  "properties" : {
    "number" : {
      "type" : "integer"
      "required" : true
    },
    "password" : {
      "type" : "string"
      "required" : true

    }
}

我有以下代码,通过删除" required"将此shcema草案3转换为草稿4,我想收集具有“需要”的节点属性名称'在他们中。我怎么做?我没有看到这方法......

             JsonNode jsonNode = jsonNodeIterator.next();
            ObjectNode element;
            if (jsonNode instanceof ObjectNode) {
                element = (ObjectNode) jsonNode;
                element.remove("required");
               String propertyName = element.getPropertyName(); //I'm looking for this kind of method.

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用List<JsonNode> findParents(String fieldName)获取具有该属性的所有节点,这样就可以实现此目的。来自文档:

  

查找包含指定字段的JSON对象的方法   此节点或其后代。如果在此中找不到匹配的字段   节点或其后代返回null。

我做了一个快速示例但是必须在你发布的JSON blob中添加几个字符,因为它缺少一些逗号和一个括号,而且不能被ObjectMapper读取。就这么简单:

JsonNode root = mapper.readTree(SCHEMA);
List<JsonNode> required = root.findParents("required");
for (JsonNode node: required) {
    Object prettyOutput = mapper.readValue(node, Object.class);
    System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(prettyOutput));
}

输出:

{
  "type" : "integer",
  "required" : true
}
{
  "type" : "string",
  "required" : true
}