Jackson获取某个子节点的值并将其转化为Java的对象数组

这篇博客主要介绍了如何使用Jackson库从复杂的Json数据中获取特定子节点的数组内容,并将其转换为Java对象数组。JavaBean用注解@JsonIgnoreProperties(ignoreUnknown = true)处理未知属性,确保解析过程中不抛出异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里的Json数据很复杂,里面有好几层,而且其中 的子节点是一个数组,在这里,需要将数组内容封装为Java的数组对象;

Json的内容:

{
    "tbk_dg_item_coupon_get_response":{
        "results":{
            "tbk_coupon":[
                {
                    "category":30,
                    "commission_rate":"4.50",
                    "coupon_click_url":"https://uland.taobao.com/coupon/edetail?e=mvRTbq1mRRgGQASttHIRqSmyu6%2FFAp46K2mDI3Xo1qOm%2FPqYSC%2BIliwl%2FigqkipDNPA2g5q8zivnk2dtbU9Go84WClZRF4SZDfqEFBOhTcwivq3Qe%2FDWhlhjKEGhiJW%2F%2FU2y3Trg%2BkOLNl1jAFZkRoct90qKVfF%2Fe5e0UAAVK3J1CKi9CgX0znYefz8NXcoYTJnbK5InWzlFfSAQOJJoy9l4X1VWjKahEfvJS92kD%2FQeT0Is0vRKBg%3D%3D&traceId=0bb6412115567144691623131e",
                    "coupon_end_time":"2019-10-19",
                    "coupon_info":"满99元减5元",
                    "coupon_remain_count":96244,
                    "coupon_start_time":"2019-04-20",
                    "coupon_total_count":100000,
                    "item_description":"",
                    "item_url":"https://detail.tmall.com/item.htm?id=578583724706",
                    "nick":"绿坝旗舰店",
                    "num_iid":578583724706,
                    "pict_url":"http://img.alicdn.com/tfscom/i2/1772094882/O1CN011lw03alMWll8Qfx_!!0-item_pic.jpg",
                    "seller_id":1772094882,
                    "shop_title":"绿坝旗舰店",
                    "small_images":{
                        "string":[
                            "http://img.alicdn.com/tfscom/i4/1772094882/O1CN011lw03bASZMMKjnP_!!1772094882.jpg",
                            "http://img.alicdn.com/tfscom/i3/1772094882/O1CN011lw03alHtMZprpH_!!1772094882.jpg",
                            "http://img.alicdn.com/tfscom/i2/1772094882/O1CN011lw03YtlI1PBiPs_!!1772094882.jpg",
                            "http://img.alicdn.com/tfscom/i1/1772094882/O1CN011lw03YtlQMyqd9N_!!1772094882.jpg"
                        ]
                    },
                    "title":"薄款夏季男士中国风休闲裤青年男装大码复古刺绣唐装裤子古风汉服",
                    "user_type":1,
                    "volume":2061,
                    "zk_final_price":"118.00"
                },
                {
                    "category":30,
                    "commission_rate":"9.00",
                    "coupon_click_url":"https://uland.taobao.com/coupon/edetail?e=jwisihWspFgGQASttHIRqZKsG13Ar14Q6vrER49hOQreQisExutkDyuGL44CpqTVFiWxtqPQ1ZgNBMZQ6leL%2F4S9MP5xWr%2BQDfqEFBOhTcwivq3Qe%2FDWhlhjKEGhiJW%2F%2FU2y3Trg%2BkOLNl1jAFZkRoct90qKVfF%2Fe5e0UAAVK3J1CKi9CgX0znYefz8NXcoYTJnbK5InWzlFfSAQOJJoy9l4X1VWjKahEfvJS92kD%2FQeT0Is0vRKBg%3D%3D&traceId=0bb6412115567144691623131e",
                    "coupon_end_time":"2019-06-29",
                    "coupon_info":"满89元减5元",
                    "coupon_remain_count":2000,
                    "coupon_start_time":"2019-04-30",
                    "coupon_total_count":2000,
                    "item_description":"",
                    "item_url":"https://detail.tmall.com/item.htm?id=593142975083",
                    "nick":"一米阳光杰1",
                    "num_iid":593142975083,
                    "pict_url":"http://img.alicdn.com/tfscom/i1/4277192882/O1CN01wxNrBa1X9zyyXLDqB_!!4277192882.jpg",
                    "seller_id":4277192882,
                    "shop_title":"潮男潮风尚",
                    "title":"薄款夏季男士中国风休闲裤青年男装大码复古刺绣唐装裤子古风汉服",
                    "user_type":0,
                    "volume":0,
                    "zk_final_price":"118.00"
                },
                {
                    "category":30,
                    "commission_rate":"7.20",
                    "coupon_click_url":"https://uland.taobao.com/coupon/edetail?e=z%2BfHmMonWRcGQASttHIRqcGqhSQqtgLm1xla088eb2MYXB958FVfbD%2BVzPUxKDG45r%2FBOTBiLAVH3G1BtpdncInK7KbZMGoPDfqEFBOhTcwivq3Qe%2FDWhlhjKEGhiJW%2F%2FU2y3Trg%2BkOLNl1jAFZkRoct90qKVfF%2Fe5e0UAAVK3J1CKi9CgX0znYefz8NXcoYTJnbK5InWzlFfSAQOJJoy9l4X1VWjKahEfvJS92kD%2FQeT0Is0vRKBg%3D%3D&traceId=0bb6412115567144691623131e",
                    "coupon_end_time":"2019-06-29",
                    "coupon_info":"满109元减10元",
                    "coupon_remain_count":1999,
                    "coupon_start_time":"2019-04-30",
                    "coupon_total_count":2000,
                    "item_description":"",
                    "item_url":"https://detail.tmall.com/item.htm?id=593071698112",
                    "nick":"lifevc",
                    "num_iid":593071698112,
                    "pict_url":"http://img.alicdn.com/tfscom/i3/3956965864/O1CN01pGCJk11tBl3FUcFfU_!!3956965864.jpg",
                    "seller_id":3956965864,
                    "shop_title":"恒利潮流服饰企业店",
                    "title":"薄款夏季男士中国风休闲裤青年男装大码复古刺绣唐装裤子古风汉服",
                    "user_type":0,
                    "volume":0,
                    "zk_final_price":"118.00"
                },
                {
                    "category":30,
                    "commission_rate":"4.50",
                    "coupon_click_url":"https://uland.taobao.com/coupon/edetail?e=BAludN7PEDoGQASttHIRqemDRwDCDkX9KNBznuI0%2BvHSJ8DRB%2BFABcJBYZjy0fDkejXxhMaJsVwMMRKLA%2Fk90fWKnxDp2f%2FBDfqEFBOhTcwivq3Qe%2FDWhlhjKEGhiJW%2F%2FU2y3Trg%2BkOLNl1jAFZkRoct90qKVfF%2Fe5e0UAAVK3J1CKi9CgX0znYefz8NXcoYTJnbK5InWzlFfSAQOJJoy9l4X1VWjKahEfvJS92kD%2FQeT0Is0vRKBg%3D%3D&traceId=0bb6412115567144691623131e",
                    "coupon_end_time":"2019-06-29",
                    "coupon_info":"满79元减10元",
                    "coupon_remain_count":99999,
                    "coupon_start_time":"2019-04-30",
                    "coupon_total_count":100000,
                    "item_description":"",
                    "item_url":"https://detail.tmall.com/item.htm?id=592794173003",
                    "nick":"tb59059817",
                    "num_iid":592794173003,
                    "pict_url":"http://img.alicdn.com/tfscom/i3/3819697421/O1CN01wM4A0a24grj0vXmND_!!3819697421.jpg",
                    "seller_id":3819697421,
                    "shop_title":"酷依依》》",
                    "title":"薄款夏季男士中国风休闲裤青年男装大码复古刺绣唐装裤子古风汉服",
                    "user_type":0,
                    "volume":0,
                    "zk_final_price":"118.00"
                },
                {
                    "category":30,
                    "commission_rate":"4.50",
                    "coupon_click_url":"https://uland.taobao.com/coupon/edetail?e=yI%2FH2kky0HcGQASttHIRqe07cvNNUf7IuLSjFsjwvzcYXB958FVfbO8ymWLu7Mlgn23gbM10w%2BKfKQJ4v8OCoFEBumlf%2BHCVDfqEFBOhTcwivq3Qe%2FDWhlhjKEGhiJW%2F%2FU2y3Trg%2BkOLNl1jAFZkRoct90qKVfF%2Fe5e0UAAVK3J1CKi9CgX0znYefz8NXcoYTJnbK5InWzlFfSAQOJJoy9l4X1VWjKahEfvJS92kD%2FQeT0Is0vRKBg%3D%3D&traceId=0bb6412115567144691623131e",
                    "coupon_end_time":"2019-06-29",
                    "coupon_info":"满79元减10元",
                    "coupon_remain_count":99977,
                    "coupon_start_time":"2019-04-30",
                    "coupon_total_count":100000,
                    "item_description":"",
                    "item_url":"https://detail.tmall.com/item.htm?id=592850441549",
                    "nick":"二琳很酷啊∫",
                    "num_iid":592850441549,
                    "pict_url":"http://img.alicdn.com/tfscom/i1/3694884544/O1CN01QeWeMF1jRCFC3DWwo_!!3694884544.jpg",
                    "seller_id":3694884544,
                    "shop_title":"u[3694884544]",
                    "title":"薄款夏季男士中国风休闲裤青年男装大码复古刺绣唐装裤子古风汉服",
                    "user_type":0,
                    "volume":0,
                    "zk_final_price":"118.00"
                }
            ]
        },
        "total_results":100,
        "request_id":"9vg6xcxdlk1n"
    }
}

在这里需要获得tbk_coupon节点中的所有值,也就是取得其中的数组,并将其封装为数组的 对象:

这里的JavaBean为:

public class ResProduct implements Serializable {
    //优惠券的地址
    private String coupon_click_url;
    //    图片的地址
    private String pict_url;
    //    店铺的名称
    private String shop_title;
    //    用券后的价格
    private String zk_final_price;
    //优惠券的面额
    private String coupon_info;

    @Override
    public String toString() {
        return "ResProduct{" +
                "coupon_click_url='" + coupon_click_url + '\'' +
                ", pict_url='" + pict_url + '\'' +
                ", shop_title='" + shop_title + '\'' +
                ", zk_final_price='" + zk_final_price + '\'' +
                ", coupon_info='" + coupon_info + '\'' +
                '}';
    }

    public String getCoupon_click_url() {
        return coupon_click_url;
    }

    public void setCoupon_click_url(String coupon_click_url) {
        this.coupon_click_url = coupon_click_url;
    }

    public String getPict_url() {
        return pict_url;
    }

    public void setPict_url(String pict_url) {
        this.pict_url = pict_url;
    }

    public String getShop_title() {
        return shop_title;
    }

    public void setShop_title(String shop_title) {
        this.shop_title = shop_title;
    }

    public String getZk_final_price() {
        return zk_final_price;
    }

    public void setZk_final_price(String zk_final_price) {
        this.zk_final_price = zk_final_price;
    }

    public String getCoupon_info() {
        return coupon_info;
    }

    public void setCoupon_info(String coupon_info) {
        this.coupon_info = coupon_info;
    }
}

由于我只要其中的一般分的值,所以在类的上加上注解:@JsonIgnoreProperties(ignoreUnknown = true)表示遇到没有的内容直接跳过就好。如果没有的话就会报错。

所以核心代码为:

ObjectMapper mapper = new ObjectMapper();
String nodeName = "tbk_coupon";
        //讀取json的数据转化为节点对象
        JsonNode node = mapper.readTree(json);
//        从节点读取数组中的位值
        JsonNode value = node.findValue(nodeName);
       //将json的数组转化为对象数组
        List<ResProduct> lendReco = mapper.readValue(value.toString(),new TypeReference<List<ResProduct>>() { });
        for (ResProduct p:
             lendReco) {
            System.out.println("lendReco = " + p);
        }

然后Success

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值