六、常用工具之Jackson


{

    "rating": {
        "max": 10,
        "average": 8.4,
        "stars": "45",
        "min": 0
    },
    "reviews_count": 5556,
    "wish_count": 131272,
    "douban_site": "",
    "year": "2016",
    "images": {
        "small": "http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2395733377.jpg",
        "large": "http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2395733377.jpg",
        "medium": "http://img3.doubanio.com/view/photo/s_ratio_poster/public/p2395733377.jpg"
    },
    "alt": "https://movie.douban.com/subject/26683290/",
    "id": "26683290",
    "mobile_url": "https://movie.douban.com/subject/26683290/mobile",
    "title": "你的名字。",
    "do_count": null,
    "share_url": "http://m.douban.com/movie/subject/26683290",
    "seasons_count": null,
    "schedule_url": "",
    "episodes_count": null,
    "countries": [
        "日本"
    ],
    "genres": [
        "剧情",
        "爱情",
        "动画"
    ],
    "collect_count": 871951,
    "casts": [
        {
            "alt": "https://movie.douban.com/celebrity/1185637/",
            "avatars": {
                "small": "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p13768.jpg",
                "large": "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p13768.jpg",
                "medium": "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p13768.jpg"
            },
            "name": "神木隆之介",
            "id": "1185637"
        },
        {
            "alt": "https://movie.douban.com/celebrity/1316660/",
            "avatars": {
                "small": "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1445093052.07.jpg",
                "large": "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1445093052.07.jpg",
                "medium": "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1445093052.07.jpg"
            },
            "name": "上白石萌音",
            "id": "1316660"
        },
        {
            "alt": "https://movie.douban.com/celebrity/1018667/",
            "avatars": {
                "small": "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1483767998.76.jpg",
                "large": "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1483767998.76.jpg",
                "medium": "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1483767998.76.jpg"
            },
            "name": "长泽雅美",
            "id": "1018667"
        },
        {
            "alt": "https://movie.douban.com/celebrity/1008549/",
            "avatars": {
                "small": "http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p40111.jpg",
                "large": "http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p40111.jpg",
                "medium": "http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p40111.jpg"
            },
            "name": "市原悦子",
            "id": "1008549"
        }
    ],
    "current_season": null,
    "original_title": "君の名は。",
    "summary": "在远离大都会的小山村,住着巫女世家出身的高中女孩宫水三叶(上白石萌音 配音)。校园和家庭的原因本就让她充满烦恼,而近一段时间发生的奇怪事件,又让三叶摸不清头脑。不知从何时起,三叶在梦中就会变成一个住在东京的高中男孩。那里有陌生的同学和朋友,有亲切的前辈和繁华的街道,一切都是如此诱人而真实。另一方面,住在东京的高中男孩立花泷(神木隆之介 配音)则总在梦里来到陌生的小山村,以女孩子的身份过着全新的生活。许是受那颗神秘彗星的影响,立花和三叶在梦中交换了身份。他们以他者的角度体验着对方的人生,这期间有愤怒、有欢笑也有暖心。只是两人并不知道,身份交换的背后隐藏着重大而锥心的秘密……\n本片为2016年度日本本土影片票房冠军。©豆瓣",
    "subtype": "movie",
    "directors": [
        {
            "alt": "https://movie.douban.com/celebrity/1005177/",
            "avatars": {
                "small": "http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p44681.jpg",
                "large": "http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p44681.jpg",
                "medium": "http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p44681.jpg"
            },
            "name": "新海诚",
            "id": "1005177"
        }
    ],
    "comments_count": 188184,
    "ratings_count": 627622,
    "aka": [
        "你的名字",
        "君之名",
        "Your Name",
        "Kimi no na wa."
    ]

}

解析如上复杂json:

private MovieDto getMovieDetailByUrl(String url){
        MovieDto movieDto = new MovieDto();
        ObjectMapper mapper = new ObjectMapper();
        String responseBody = http(url);
        if (!StringUtils.isEmpty(url)){
            JsonNode movieNode = null;
            try {
                movieNode = mapper.readTree(responseBody);
                movieDto.setTitle(movieNode.path("title").asText());
                movieDto.setCoverImg(movieNode.path("images").path("large").asText());
                movieDto.setAverage(movieNode.path("rating").path("average").asDouble());
                movieDto.setStars(movieNode.path("rating").path("stars").asInt());

                movieDto.setCountry(processArray(movieNode.get("countries")));
                movieDto.setOriginalTitle(movieNode.path("original_title").asText());
                movieDto.setWishCount(movieNode.path("wish_count").asInt());
                movieDto.setCommentCount(movieNode.path("comments_count").asInt());
                movieDto.setYear(movieNode.path("year").asText());

                movieDto.setGenres(processArray(movieNode.get("genres")));

                List<Person> directors = getPersons(movieNode.get("directors"));
                movieDto.setDirectors(directors);

                List<Person> casts = getPersons(movieNode.get("casts"));
                movieDto.setCasts(casts);

                movieDto.setSummary(movieNode.path("summary").asText());

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return movieDto;
    }

关键点一:
  对于节点中嵌套多个对象,此时已经无法通过 movieNode.path("casts") 来获取节点了,而需要通过 movieNode.get("casts") 获取节点,比如:

 "casts": [
        {
            "alt": "https://movie.douban.com/celebrity/1185637/",
            "avatars": {
                "small": "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p13768.jpg",
                "large": "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p13768.jpg",
                "medium": "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p13768.jpg"
            },
            "name": "神木隆之介",
            "id": "1185637"
        },
        {
            "alt": "https://movie.douban.com/celebrity/1316660/",
            "avatars": {
                "small": "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1445093052.07.jpg",
                "large": "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1445093052.07.jpg",
                "medium": "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1445093052.07.jpg"
            },
            "name": "上白石萌音",
            "id": "1316660"
        },
        {
            "alt": "https://movie.douban.com/celebrity/1018667/",
            "avatars": {
                "small": "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1483767998.76.jpg",
                "large": "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1483767998.76.jpg",
                "medium": "http://img3.doubanio.com/view/celebrity/s_ratio_celebrity/public/p1483767998.76.jpg"
            },
            "name": "长泽雅美",
            "id": "1018667"
        },
        {
            "alt": "https://movie.douban.com/celebrity/1008549/",
            "avatars": {
                "small": "http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p40111.jpg",
                "large": "http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p40111.jpg",
                "medium": "http://img1.doubanio.com/view/celebrity/s_ratio_celebrity/public/p40111.jpg"
            },
            "name": "市原悦子",
            "id": "1008549"
        }
    ]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值