Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.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 如何使用Jackson在嵌套的JsonNode中获取集合_Java_Json_Jackson - Fatal编程技术网

Java 如何使用Jackson在嵌套的JsonNode中获取集合

Java 如何使用Jackson在嵌套的JsonNode中获取集合,java,json,jackson,Java,Json,Jackson,我有一个低于JSON的结构。我需要使用Jackson库来解析它。我正在构建一个web服务,它在POST方法体中接受下面的JSON { "organization": { "products": [ "foo", "bar", "baz" ] }, "mission" : "to be the best in domain" } 到目前为止,我使用的是简单的JSON主体

我有一个低于JSON的结构。我需要使用Jackson库来解析它。我正在构建一个web服务,它在POST方法体中接受下面的JSON

{
    "organization": {
        "products": [
            "foo",
            "bar",
            "baz"
        ]
    },
    "mission" : "to be the best in domain"
}
到目前为止,我使用的是简单的JSON主体,它没有嵌套的JSON元素,比如在本例中,
organization
是另一个包含一组产品的JSON节点

此JSON密钥不是必需的,我正在接受/存储
organization
JSON中的
JsonNode
。做下面的检查

  • 如果
    组织
    为空
  • 如果
    组织
    不为空,并且它有
    产品
  • 但是在那之后,我不知道如何从这个
    JsonNode
    获取一组板,并将其存储在Java的HashSet中

    我的预期O/p应该是从我的
    组织
    JsonNode提取一组板

    附言:-我想我必须使用
    ObjectMapper
    ,但找不到直接获取集合的方法。看起来我需要使用一些我不太熟悉的JsonParser。

    您可以为自己的目的创建DTO(数据传输对象)。嵌套对象可以具有如下结构:

    class Organization {
        List<String> Products;
        .....
    }
    
    class WebOrganizationRequest {
        Organization organization;
        String mission;
    }
    
    班级组织{
    列出产品清单;
    .....
    }
    类WebOrganizationRequest{
    组织机构;
    弦乐团;
    }
    

    通过以这种方式创建对象,您将JSON对象映射到类,当您将JSON作为请求主体类型传入控制器时,Jackson会将其类型转换为WebOrganizationRequest的实例。

    您是否将其用于spring之类的框架?是的,我使用的是dropwizard,默认情况下jackson for json解析的位置。您能显示您正在执行的代码吗?这种方式我已经知道了,但每次都需要更改代码,如果我向我的
    组织添加另一个键,它是嵌套的JSON。这是处理它的一般方式,在spring和dropwizard等框架中它是现成的。将元素添加到组织类中可以让您知道请求中需要哪些参数,并在需要时添加任何验证等。通常,在API调用中,我们知道控制器应该期望什么。因此,更新代码应该不会太麻烦。感谢您提供的附加信息,如果您能提供一些参考以了解更多信息,那将非常好。您可以在dropwizard文档()中找到更多信息。您可以看到它们如何在post请求主体中映射通知类。为了使事情变得更简单,还可以使用Lombok(),它使用注释向类中添加setter和getter方法,从而使操作更简单。