当前位置: 首页 > 知识库问答 >
问题:

Jackson:将json解析为给定Map的Map

尹小云
2023-03-14

我得到了一个配置好的jackson的ObjectMapper实例,其中应用了一些模块、反序列化器和配置。

我还有一个“平面”json,这意味着要么没有内部节点,要么ObjectMapper能够将内部节点解析为单个对象。

我想将给定的json解析为映射

这就像用jackson.reader(). fotType(Pojo.class). readValue()解析pojo,然后使用反射收集pojo字段。但是我想避免提取pojo的类,避免使用反射并获取结果Map只存在于json属性中。

共有1个答案

容寒
2023-03-14

受将JsonNode转换为POJO启发的解决方案:

  1. 将json解析为树

代码段:

public Map<String, Object> decode(String json, Map<String, Class<?>> propertyClasses) throws JsonProcessingException {
  final HashMap<String, Object> parsedFields = new HashMap<>();
  final Iterator<Map.Entry<String, JsonNode>> jsonNodes = jacksonReader.readTree(json).fields();
  while (jsonNodes.hasNext()) {
    final Map.Entry<String, JsonNode> jsonEntry = jsonNodes.next();
    final String propertyName = jsonEntry.getKey();
    final Class<?> propertyClass = propertyClasses.get(propertyName);
    final Object parsedField = jacksonReader.treeToValue(jsonEntry.getValue(), propertyClass);
    parsedFields.put(propertyName, parsedField);
  }
  return parsedFields;
}
 类似资料:
  • 我试图简化我的代码:我想存储键和值(所有字符串)。 我实际上在使用

  • 问题内容: 我试图简化我的代码:我想存储键和值(所有字符串)。 我实际上是使用A 来存储它。hat方法可以是值()或新节点()。 如何简化此代码?递归函数会很好。 问题答案: 假设您的最终目标只是将JSON反序列化为,那么使用Jackson可以简单得多。使用: 您将需要错误处理等,但这是一个很好的起点。

  • 问题内容: 他们在Play Framework的首页上声称“ JSON是头等公民”。我还没有看到证明。 在我的项目中,我正在处理一些非常复杂的JSON结构。这只是一个非常简单的示例: 现在,我知道Play正在使用Jackson解析JSON。我在Java项目中使用Jackson,并且会做如下简单的事情: 这将很好地将我的JSON解析为我想要的Map对象-字符串和对象对Map,并允许我轻松地将数组转换

  • 我有下面的JSON,我想解析到下面的bean类。 豆类 1 Bean类2 在这里,我无法使用下面的代码解析这些JavaPOJO。 jsonObjMapper.readValue(jsonString,DistributedCookieBean.class); 堆栈跟踪: org . code Haus . Jackson . map . jsonmappingexception:无法从START_

  • 我已经试过各种方法来解决这个问题了。但没有成功。 我有几节这样的课 在这种情况下,T可以是任何对象,并且应该可以在运行时解析。 Jackson真的无法将json反序列化为泛型类型吗?

  • 我有一个JSON文件,它可以有多种类型。 例如: 我想把它们解析成对象。即,我想创建一个具有所有者/名称/玩具属性的狗对象,以及具有名称/地址属性的人,并使用Jackson通读并从中创建对象。 排序很重要——例如,我需要知道Rex先于John Doe。我更喜欢使用类似流的方法(即。读取并解析Rex到Dog对象中,对其做一些事情,然后丢弃它,然后转到John Doe)。所以我需要一种基于流的方法。