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

如何使用Jackson注释将嵌套值映射到属性?

逄皓轩
2023-03-14
{
  "id": 123,
  "name": "The Best Product",
  "brand": {
     "id": 234,
     "name": "ACME Products"
  }
}
public class ProductTest {
    private int productId;
    private String productName, brandName;

    @JsonProperty("id")
    public int getProductId() {
        return productId;
    }

    public void setProductId(int productId) {
        this.productId = productId;
    }

    @JsonProperty("name")
    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public String getBrandName() {
        return brandName;
    }

    public void setBrandName(String brandName) {
        this.brandName = brandName;
    }
}
  JsonNode apiResponse = api.getResponse();
  Product product = Json.fromJson(apiResponse, Product.class);
    @JsonProperty("brand.name")
    public String getBrandName() {
        return brandName;
    }

但当然没有。有没有一个简单的方法来完成我想要的使用注释?

我试图解析的实际JSON响应非常复杂,我不想为每个子节点创建一个完整的新类,即使我只需要一个字段。

共有1个答案

栾和玉
2023-03-14

这是我用来解决与JSON嵌套映射相关的任何问题的解决方案。

首先将您的响应存储为映射:

        ResponseEntity<Map<String, Object>> response =
        restTemplate.exchange(
            requestUri,
            HttpMethod.GET,
            buildAuthHeader(),
            new ParameterizedTypeReference<>() {
            });

现在可以读取JSON树中的任何嵌套值。例如:

response.getBody().get("content").get(0).get("terminal")
{
"page": 0,
"total_pages": 1,
"total_elements": 2,
"content": [
    {
        "merchant": "000405",
        "terminal": "38010101",
        "status": "Para ser instalada", 
....
 类似资料:
  • 问题内容: 假设我正在调用一个API,该API用产品的以下JSON响应: 我可以使用Jackson标注来映射产品ID和名称: 然后使用fromJson方法创建产品: 但是现在我试图弄清楚如何获取品牌名称,这是一个嵌套属性。我希望这样的事情会起作用: 但是,当然没有。有没有一种简单的方法可以使用注释来完成我想要的工作? 我尝试解析的实际JSON响应非常复杂,即使我只需要一个字段,我也不必为每个子节点

  • 问题内容: 假设我正在调用一个API,该API以产品的以下JSON响应: 我可以使用Jackson标注来映射产品ID和名称: 然后使用fromJson方法创建产品: 但是,现在我试图弄清楚如何获取品牌名称,这是一个嵌套属性。我希望这样的事情会起作用: 但是,当然没有。有没有一种简单的方法可以使用注释来完成我想要的工作? 我尝试解析的实际JSON响应非常复杂,即使我只需要一个字段,我也不必为每个子节

  • 我试图动态解析一些JSON到一个Map 但是当我尝试使用一些更复杂的JSON和嵌套信息时失败了。我试图从json解析示例数据。组织 我得到以下错误 异常在线程"main"com.fasterxml.jackson.databind.JsonMapping异常:不能反序列化实例的java.lang.字符串START_OBJECT令牌 有没有办法将复杂的JSON数据解析成映射?

  • 有没有什么方法可以将嵌套的JSON值映射到字段而不需要额外的类?我有一个JSON响应 但是在中,我只需要值。因此,我决定创建Kotlin数据类,并尝试使用注释的选项 下面的代码正在工作 我有几个嵌套值,为它们创建额外的类是相当夸张的。还有比为节点创建嵌套类更好的方法吗?

  • 如何使用杰克逊序列化此类 Jackson没有拾取@XmlElementWrapper@XmlSee还有注释,Jackson也没有映射@XmlRootElement注释。我使用的是Jackson 1.9.0。Jackson正在将元素放入列表中,但没有映射POJO类的根元素。 这里是示例方法。 它生成的响应是'{“response”:{“status”:0,“PBBeans”:[{“user_name

  • 我有一个restendpoint,它返回3级嵌套json,如下所示: 我有一个java类,没有相同的3个嵌套级别: 当我使用restTemplate拨打rest电话时: jackson甚至没有使用json ignore属性映射字段departName(因为我猜它不在同一嵌套级别)。 如何将这个http json响应映射到忽略嵌套父json的java字段?