Java 从json中提取特定字段,并根据特定类反序列化它<&燃气轮机;
我有一段json字符串,我想提取特定的字段,如果字段存在,我想将其反序列化为特定的类型(类) 到目前为止,我已经尝试使用ObjectMapper,但问题是它的工作方式是将输入json值映射到指定的类类型。在我的例子中,我需要从json字符串中提取特定字段,并将它们反序列化为对象 接下来,我尝试了JsonParser,它提供了更多的选项,因为我可以逐个字段迭代json,并为每个字段调用'readValueAs'方法。这对我来说几乎是完美的,我的问题是我不想一个字段一个字段地检查json,我想动态地告诉解析器要解析哪个字段,然后将其反序列化为一个对象 以下是我想要实现的一个例子: 假设我有这个jsonJava 从json中提取特定字段,并根据特定类反序列化它<&燃气轮机;,java,json,jackson,mongo-jackson-mapper,Java,Json,Jackson,Mongo Jackson Mapper,我有一段json字符串,我想提取特定的字段,如果字段存在,我想将其反序列化为特定的类型(类) 到目前为止,我已经尝试使用ObjectMapper,但问题是它的工作方式是将输入json值映射到指定的类类型。在我的例子中,我需要从json字符串中提取特定字段,并将它们反序列化为对象 接下来,我尝试了JsonParser,它提供了更多的选项,因为我可以逐个字段迭代json,并为每个字段调用'readValueAs'方法。这对我来说几乎是完美的,我的问题是我不想一个字段一个字段地检查json,我想动态地
{“name”:“Bob”,“age”:21,“status”:false}
我只想提取“name”的值(Bob),然后将其反序列化为
java.lang.String
我该怎么做
编辑:
我试图更好地描述我的流程:
当应用程序第一次加载时,我使用反射读取特定方法的参数,稍后当应用程序收到json消息时,我希望以json中的每个键对应于该方法的一个参数的方式解析该消息。因此,我需要将json中键的值反序列化为与该参数匹配的对象
如果您了解JAVA-8中的反射机制,您可以获得参数的类型及其名称,就像您在代码中编写的一样
希望这能让事情变得更清楚…不确定:-)多亏了我得到的帮助,我终于找到了答案
我需要的正确方法是
ObjectMapper#convertValue
,它接受一个对象并返回一个Class类型的对象。它分两步完成:第一步将对象转换为json表示,第二步将其序列化为类。您可以将json反序列化为Map或JsonNode,然后提取必要的字段。我可以将字段作为JsonNode获取,但该类不公开类似于:public t readValueAs(Class valueType)的方法我只知道运行时的类型,因此无法使用JsonNode的功能。您可以使用ObjectMapper#treeToValue方法将JsonNode转换为对象。最终,感谢您的帮助,我找到了答案!!!正确的方法是ObjectMapper#convertValue,它接受一个对象并返回一个Class类型的对象。它分两步完成:第一步将对象转换为json表示,第二步将其序列化为类。