【发布时间】:2014-08-17 03:19:26
【问题描述】:
我有一段 json 字符串,我想提取特定字段,并且该字段存在我想将其反序列化为特定类型(类)。
到目前为止,我已经尝试过使用 ObjectMapper,但它的问题在于它的设计方式是将输入 json 值映射到指定的类类型。在我的情况下,我需要从 json 字符串中取出特定字段并将它们反序列化为对象。
接下来,我尝试了 JsonParser,它提供了更多选项,因为我可以逐个字段迭代 json 字段并为每个字段调用“readValueAs”方法。这对我来说几乎是完美的,我的问题是我不想逐个字段地遍历 json,我想动态地告诉解析器要解析哪个字段,然后才将其反序列化为一个对象。
这是我想要实现的示例:
假设我有这个 json { "name" : "Bob", "age" : 21, "status" : false }
我只想提取“名称”的值 (Bob),然后将其反序列化为 java.lang.String
我该怎么做??
编辑: 我试着更好地描述我的流程: 当应用程序第一次加载时,我使用反射读取特定方法的参数,稍后当应用程序接收到 json 消息时,我想以 json 中的每个键对应于方法的一个参数的方式解析消息。所以我需要将 json 中的键值反序列化为与该参数匹配的对象。
如果您了解 JAVA-8 中的反射机制,您可以像在代码中写的那样获取参数的类型和名称!
希望这能让它更清楚......不确定:-)
【问题讨论】:
-
您可以将您的 JSON 反序列化为 Map 或 JsonNode,然后提取必要的字段。
-
我可以将字段作为JsonNode,但是这个类没有暴露类似的方法:public
T readValueAs(Class valueType) -
我只知道运行时的类型,所以无法使用JsonNode的功能。
-
您可以使用 ObjectMapper#treeToValue 方法将 JsonNode 转换为对象。
-
感谢您的帮助,我终于找到了答案!!!做我需要的正确方法是 ObjectMapper#convertValue,它接受一个对象并返回一个 Class
类型的对象。它分两步完成:第一步将对象转换为 json 表示,第二步将其序列化为 Class .
标签: java json jackson mongo-jackson-mapper