【问题标题】:Why JsonParser is returning null?为什么 JsonParser 返回 null?
【发布时间】:2016-07-31 12:41:50
【问题描述】:

我有一个自定义的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)

【问题讨论】:

  • 你能显示堆栈跟踪吗?
  • @cricket_007 这是错误详情:github.com/shell-software/tree/issues/2,谢谢。
  • 好的 1) 你的问题应该是独立的,最好是minimal reproducible example 2) 部门解析器类的第 40 行是什么?
  • @cricket_007 谢谢。我刚刚解决了。
  • @KeryHu 我在这里聚会晚了 4 年,但如果您自己解决问题,您应该发布您的解决方案作为您自己问题的答案。

标签: java json spring-boot tree json-deserialization


【解决方案1】:

错误表示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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-26
    • 2016-12-28
    • 2015-11-25
    • 2015-07-04
    • 2019-09-29
    • 2015-02-25
    • 2015-10-21
    • 2021-08-12
    相关资源
    最近更新 更多