【问题标题】:getting multi-level json value获取多级json值
【发布时间】:2020-04-29 21:44:30
【问题描述】:

在这个 json 中,获取对象产品的最佳方式是什么。

我通常在我的 json 返回中创建所有对象,直到我发现我想要。但是现在需要一个直接的形式。

Products products = new Products(); 

JsonOrigin jsonOrigin = getJson();

getJson() = 值 --->

{"content": {

"date": 1467045042000, "id": 228371,
"volume": [

           { "shipment_order_volume_number": "1",
            "products": [{"id": 13, "sku": "CPM"},{"id": 14,"sku": "QAA"}]
           },
           { "shipment_order_volume_number": "2",
            "products": [{"id": 15, "sku": "AAA"},{"id": 16,"sku": "ABC"}]
           }
         ]
}
}

我在我的产品对象中使用以下值:

[{"id": 13, "sku": "CPM"},{"id": 14,"sku": "QAA"}, {"id": 15, "sku": "AAA"},{"id": 16,"sku": "ABC"}]

【问题讨论】:

    标签: java json object lambda


    【解决方案1】:

    你需要有几个 POJO

    class Content {
        private long date;
        private int id;
        private List<ShipmentOrder> volume;
    // getters/setters
    }
    
    class ShipmentOrder {
        @JsonProperty("shipment_order_volume_number")
        private int shipmentOrderVolumeNumber;
        private List<Product> products;
    // getters/setters
    }
    
    class Product {
        private int id;
        private String sku;
    // getters/setters
    }
    

    如您在示例中展示的那样,如果您需要收集每个 Content 实例的所有产品,您可以实现以下方法:

    class Content {
        Set<Product> getAllProducts() {
            if (null == volume) {
                return null;
            }
            return volume.stream()
                         .filter (shipment -> shipment.getProducts() != null)
                         .flatMap(shipment -> shipment.getProducts().stream())
                         .collect(Collectors.toSet());
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      相关资源
      最近更新 更多