Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从json中提取特定字段,并根据特定类反序列化它<&燃气轮机;_Java_Json_Jackson_Mongo Jackson Mapper - Fatal编程技术网

Java 从json中提取特定字段,并根据特定类反序列化它<&燃气轮机;

Java 从json中提取特定字段,并根据特定类反序列化它<&燃气轮机;,java,json,jackson,mongo-jackson-mapper,Java,Json,Jackson,Mongo Jackson Mapper,我有一段json字符串,我想提取特定的字段,如果字段存在,我想将其反序列化为特定的类型(类) 到目前为止,我已经尝试使用ObjectMapper,但问题是它的工作方式是将输入json值映射到指定的类类型。在我的例子中,我需要从json字符串中提取特定字段,并将它们反序列化为对象 接下来,我尝试了JsonParser,它提供了更多的选项,因为我可以逐个字段迭代json,并为每个字段调用'readValueAs'方法。这对我来说几乎是完美的,我的问题是我不想一个字段一个字段地检查json,我想动态地

我有一段json字符串,我想提取特定的字段,如果字段存在,我想将其反序列化为特定的类型(类)

到目前为止,我已经尝试使用ObjectMapper,但问题是它的工作方式是将输入json值映射到指定的类类型。在我的例子中,我需要从json字符串中提取特定字段,并将它们反序列化为对象

接下来,我尝试了JsonParser,它提供了更多的选项,因为我可以逐个字段迭代json,并为每个字段调用'readValueAs'方法。这对我来说几乎是完美的,我的问题是我不想一个字段一个字段地检查json,我想动态地告诉解析器要解析哪个字段,然后将其反序列化为一个对象

以下是我想要实现的一个例子:

假设我有这个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表示,第二步将其序列化为类。