繁体   English   中英

为什么 JsonParser 返回 null?

[英]Why JsonParser is returning null?

我有一个自定义的JSON Deserializer ,但它给出了一些错误( TreeNode<Department>是一个 Java 树结构类)。

public TreeNode<Department> deserialize(JsonParser jp, DeserializationContext ctxt)
      throws IOException, JsonProcessingException {

    return parseDepartment(jp);
  }


 private TreeNode<Department> parseDepartment(JsonParser jp) throws JsonProcessingException, IOException{
    JsonNode node=jp.getCodec().readTree(jp);
    if(node.has("name")){
      String name=node.get("name").asText();

      TreeNode<Department> n1 = new LinkedMultiTreeNode<Department>(new Department(name));

      if(node.has("department")&&node.get("department").isArray()){
        ArrayNode departments=(ArrayNode)node.get("department");

          Collection<TreeNode<Department>> backNodes=parseDepartments(jp,departments);
          if(backNodes!=null){
            backNodes.forEach(e->{
              n1.add(e);
            });
          }

      }

      return n1;

    }
    else{
      return null;
    }

  }

和另一个私有方法:

private Collection<TreeNode<Department>> parseDepartments(JsonParser jp,ArrayNode arrayNode) throws JsonProcessingException, IOException{
    Collection<TreeNode<Department>> a=new HashSet<>();
    JsonNode node=jp.getCodec().readTree(jp);

    // why here "node" is null?

    if(arrayNode==null) return null;
    arrayNode.forEach(e->{
      try {
        log.info(e.toString());
        TreeNode<Department> m=parseDepartment(jp);
        if(m!=null){
          a.add (m);
          log.info(a.toString());
        }

      } catch (Exception e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
      }
    }

    );
    return a;
  }

当我运行test时:

ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(TreeNode.class, new DepartmentDeserializer());
mapper.registerModule(module);

TreeNode<Department> n=mapper.readValue(json, TreeNode.class);
System.out.println(n);

错误是:

java.lang.NullPointerException --jp.getCodec().readTree(jp)

该错误表明jp.getCodec()返回null 这样的事情对我有用。

ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(TreeNode.class, new DepartmentDeserializer());
mapper.registerModule(module);

JsonFactory jsonFactory = new JsonFactory(mapper);
JsonParser jsonParser = jsonFactory.createParser(json);

TreeNode<Department> n=mapper.readValue(jsonParser, TreeNode.class);
System.out.println(n);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM