欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用jackson實(shí)現(xiàn)對(duì)象json之間的相互轉(zhuǎn)換(spring boot)

 更新時(shí)間:2021年09月17日 14:55:50   作者:綠綠峰  
這篇文章主要介紹了使用jackson實(shí)現(xiàn)對(duì)象json之間的相互轉(zhuǎn)換(spring boot),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

之前的json轉(zhuǎn)對(duì)象,對(duì)象轉(zhuǎn)json。總是比較繁瑣,不夠簡(jiǎn)潔。自從接觸到j(luò)ackson之后,發(fā)現(xiàn)原來(lái)對(duì)象和json轉(zhuǎn)換可以這么簡(jiǎn)單。拿一個(gè)天氣預(yù)報(bào)的小例子來(lái)說(shuō)明一下~如下圖。【若是有小誤,還望指正】

不說(shuō),直接上碼~

首先,在pom.xml里弄好依賴

具體依賴需要上網(wǎng)去查找,咱用的是下面這個(gè)。

		<!-- 對(duì)象轉(zhuǎn)換成json引入如下依賴 -->
		<!-- 文檔:https://www.yiibai.com/jackson/jackson_first_application.html#article-start -->
		<dependency>
    		<groupId>com.fasterxml.jackson.core</groupId>
    		<artifactId>jackson-databind</artifactId>
    		<version>2.7.4</version>
		</dependency>

然后嘞,準(zhǔn)備一個(gè)接口,

用來(lái)獲取天氣預(yù)報(bào)接口的數(shù)據(jù)

package com.lvfeng.tool.weather; 
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.URL;
 
/**
 * @author LvFeng
 * 來(lái)源:https://www.nowapi.com/
 * 文檔:https://www.nowapi.com/api/weather.future
 * 接口服務(wù)器【請(qǐng)求頭】:https://sapi.k780.com   http://api.k780.com
 * 每三個(gè)月一更新,需要定期更新
 */
public class WeatherAPI {
	/*
	 * 00a.天氣預(yù)報(bào)接口
	 */
	public static final String APP_KEY_WEATHER = "你自己的key";	//KEY
	public static final String SIGN_WEATHER = "你自己的sign";	//SIGN
	/*
	 * 001.獲取一周的天氣
	 * @param 請(qǐng)求城市氣象編碼,請(qǐng)求APPKey,SignKey,返回?cái)?shù)據(jù)格式
	 * @return JSON
	 * DOC:https://www.nowapi.com/api/weather.future
	 * FORMAT:http://api.k780.com/?app=weather.future&weaid=1&appkey=APPKEY&sign=SIGN&format=json
	 */
	public static String getWeatherWeek(String cityNumber,String ak,String sg,String returnFormat) throws Exception{
		String str = "http://api.k780.com/?app=weather.future&weaid="+cityNumber+"&appkey="+ak+"&sign="+sg+"&format="+returnFormat;
		URL url = new URL(str);	//請(qǐng)求URL
		InputStream ins = url.openStream();	//打開輸入流
		ByteArrayOutputStream out=new ByteArrayOutputStream();
		try {
            byte buf[] = new byte[1024];
            int read = 0;
            while ((read = ins.read(buf)) > 0) {
                out.write(buf, 0, read);
            }
        } finally {
            if (ins != null) {
                ins.close();
            }
        }
        byte b[] = out.toByteArray( );
		return new String(b,"utf-8");	//轉(zhuǎn)碼
	}
}

插一嘴,簡(jiǎn)單粗暴的講,[]就是數(shù)組,{}就是對(duì)象,我們測(cè)試接口過(guò)后,

返回的json字符串就像下面這個(gè)樣子

		/* {
		 * "success":"1",
		 * "result":[{
		 * 		"weaid":"1",
		 * 		"days":"2018-07-18",
		 * 		"week":"星期三",
		 * 		"cityno":"beijing",
		 * 		"citynm":"北京",
		 * 		"cityid":"101010100",
		 * 		"temperature":"32℃/25℃",
		 * 		"humidity":"0%/0%",
		 * 		"weather":"多云轉(zhuǎn)小雨",
		 * 		"weather_icon":"http://api.k780.com/upload/weather/d/1.gif",
		 * 		"weather_icon1":"http://api.k780.com/upload/weather/n/7.gif",
		 * 		"wind":"東風(fēng)",
		 * 		"winp":"<3級(jí)",
		 * 		"temp_high":"32",
		 * 		"temp_low":"25",
		 * 		"humi_high":"0",
		 * 		"humi_low":"0",
		 * 		"weatid":"2",
		 * 		"weatid1":"8",
		 * 		"windid":"10",
		 * 		"winpid":"395",
		 * 		"weather_iconid":"1",
		 * 		"weather_iconid1":"7"
		 * 	}, 這后面類似……
		 */

然后我們根據(jù)這構(gòu)建對(duì)象,根據(jù)這段json分析,這可能是倆對(duì)象,然后,一個(gè)對(duì)象是結(jié)果集數(shù)組[],一個(gè)對(duì)象是狀態(tài)(是否成功),于是,

我拆成了下面兩個(gè)對(duì)象

package com.lvfeng.tool.weather.pojo; 
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
 
/**
 * @author Administrator
 * 一周天氣對(duì)象
 * DOC:https://blog.csdn.net/u010457406/article/details/50921632
 * 	   https://blog.csdn.net/jxchallenger/article/details/79293772
 */
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,property ="success")
public class WeatherWeek {
	private String success;	//是否成功
	private List<Result> result;	//結(jié)果集數(shù)組
 
	public String getSuccess() {
		return success;
	}
	public void setSuccess(String success) {
		this.success = success;
	}
	public List<Result> getResult() {
		return result;
	}
	public void setResult(List<Result> result) {
		this.result = result;
	}
}
package com.lvfeng.tool.weather.pojo;
/**
 * @author LvLvFeng
 * Weather子類,天氣結(jié)果的返回值
 */
public class Result {
	private String weaid;	//本站【調(diào)用接口的這個(gè)站點(diǎn)】的城市ID編號(hào)
	private String days;	//日期
	private String week;	//周幾
	private String cityno;	//城市編碼
	private String citynm;	//城市名稱
	private String cityid;	//城市氣象ID【標(biāo)準(zhǔn)】
	private String temperature;	//氣溫
	private String humidity;	//濕度【暫未使用】
	private String weather;		//天氣
	private String weather_icon;	//白天的氣象圖標(biāo)
	private String weather_icon1;	//夜間的氣象圖標(biāo)
	private String wind;			//風(fēng)向
	private String winp;			//風(fēng)力
	private String temp_high;		//最高氣溫
	private String temp_low;		//最低氣溫
	private String humi_high;		//溫度欄位【棄用】
	private String humi_low;		//濕度欄位【棄用】
	private String weatid;			//白天天氣ID,可對(duì)照weather.wtype接口中weaid
	private String weatid1;			//夜間天氣ID,可對(duì)照weather.wtype接口中weaid
	private String windid;			//風(fēng)向ID(暫無(wú)對(duì)照表)
	private String winpid;			//風(fēng)力ID(暫無(wú)對(duì)照表)
	private String weather_iconid;	//氣象圖標(biāo)編號(hào)(白天),對(duì)應(yīng)weather_icon 1.gif
	private String weather_iconid1;	//氣象圖標(biāo)編號(hào)(夜間),對(duì)應(yīng)weather_icon1 0.gif
	public String getWeaid() {
		return weaid;
	}
	public void setWeaid(String weaid) {
		this.weaid = weaid;
	}
	public String getDays() {
		return days;
	}
	public void setDays(String days) {
		this.days = days;
	}
	public String getWeek() {
		return week;
	}
	public void setWeek(String week) {
		this.week = week;
	}
	public String getCityno() {
		return cityno;
	}
	public void setCityno(String cityno) {
		this.cityno = cityno;
	}
	public String getCitynm() {
		return citynm;
	}
	public void setCitynm(String citynm) {
		this.citynm = citynm;
	}
	public String getCityid() {
		return cityid;
	}
	public void setCityid(String cityid) {
		this.cityid = cityid;
	}
	public String getTemperature() {
		return temperature;
	}
	public void setTemperature(String temperature) {
		this.temperature = temperature;
	}
	public String getHumidity() {
		return humidity;
	}
	public void setHumidity(String humidity) {
		this.humidity = humidity;
	}
	public String getWeather() {
		return weather;
	}
	public void setWeather(String weather) {
		this.weather = weather;
	}
	public String getWeather_icon() {
		return weather_icon;
	}
	public void setWeather_icon(String weather_icon) {
		this.weather_icon = weather_icon;
	}
	public String getWeather_icon1() {
		return weather_icon1;
	}
	public void setWeather_icon1(String weather_icon1) {
		this.weather_icon1 = weather_icon1;
	}
	public String getWind() {
		return wind;
	}
	public void setWind(String wind) {
		this.wind = wind;
	}
	public String getWinp() {
		return winp;
	}
	public void setWinp(String winp) {
		this.winp = winp;
	}
	public String getTemp_high() {
		return temp_high;
	}
	public void setTemp_high(String temp_high) {
		this.temp_high = temp_high;
	}
	public String getTemp_low() {
		return temp_low;
	}
	public void setTemp_low(String temp_low) {
		this.temp_low = temp_low;
	}
	public String getHumi_high() {
		return humi_high;
	}
	public void setHumi_high(String humi_high) {
		this.humi_high = humi_high;
	}
	public String getHumi_low() {
		return humi_low;
	}
	public void setHumi_low(String humi_low) {
		this.humi_low = humi_low;
	}
	public String getWeatid() {
		return weatid;
	}
	public void setWeatid(String weatid) {
		this.weatid = weatid;
	}
	public String getWeatid1() {
		return weatid1;
	}
	public void setWeatid1(String weatid1) {
		this.weatid1 = weatid1;
	}
	public String getWindid() {
		return windid;
	}
	public void setWindid(String windid) {
		this.windid = windid;
	}
	public String getWinpid() {
		return winpid;
	}
	public void setWinpid(String winpid) {
		this.winpid = winpid;
	}
	public String getWeather_iconid() {
		return weather_iconid;
	}
	public void setWeather_iconid(String weather_iconid) {
		this.weather_iconid = weather_iconid;
	}
	public String getWeather_iconid1() {
		return weather_iconid1;
	}
	public void setWeather_iconid1(String weather_iconid1) {
		this.weather_iconid1 = weather_iconid1;
	}	
}

開始書寫工具類,方便以后調(diào)用~

package com.lvfeng.tool.change;  
import java.io.IOException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
 
/**
 * @author LvLvFeng
 * 操作json的封裝方法
 * use:jackson
 */
public class JSONChange {
	/*
	 * 001.json轉(zhuǎn)換成對(duì)象
	 * @param:傳入對(duì)象,json字符串
	 * @return:Object
	 */
	public static Object jsonToObj(Object obj,String jsonStr) throws JsonParseException, JsonMappingException, IOException {
		ObjectMapper mapper = new ObjectMapper();	
	    return obj = mapper.readValue(jsonStr, obj.getClass());
	}
	/*
	 * 002.對(duì)象轉(zhuǎn)換成json
	 * @param:傳入對(duì)象
	 * @return:json字符串
	 */
	public static String objToJson(Object obj) throws JsonProcessingException {
		ObjectMapper mapper = new ObjectMapper();
		return mapper.writeValueAsString(obj);
	}
}

封裝完成,寫測(cè)試類

package com.lvfeng.tool.weather; 
import com.lvfeng.tool.change.JSONChange;
import com.lvfeng.tool.weather.pojo.WeatherWeek; 
public class TestWeather {
	public static void main(String[] args) throws Exception{
		//城市列表,ak,sg,返回格式
		String res = WeatherAPI.getWeatherWeek("1", WeatherAPI.APP_KEY_WEATHER, WeatherAPI.SIGN_WEATHER, "json");
		System.out.println("結(jié)果集" + res);
		String res2 = WeatherAPI.getNowWeather("1", WeatherAPI.APP_KEY_WEATHER, WeatherAPI.SIGN_WEATHER, "json");
		System.out.println("結(jié)果集2" + res2);
		WeatherWeek wea = (WeatherWeek)JSONChange.jsonToObj(new WeatherWeek(), res);
		System.out.println("是否成功?"+wea.getSuccess()+"結(jié)果集舉例【城市名稱】:"+wea.getResult().get(0).getCitynm());
		System.out.println("---------------------開始反轉(zhuǎn)------------------");
		String jsonStr = JSONChange.objToJson(wea);
		System.out.println("反轉(zhuǎn)結(jié)果:"+jsonStr);
	}
}

如上,就把查詢天氣預(yù)報(bào)的結(jié)果轉(zhuǎn)換成倆對(duì)象了,然后我們操作對(duì)象~啦啦啦!

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot框架aop切面的execution表達(dá)式解讀

    SpringBoot框架aop切面的execution表達(dá)式解讀

    這篇文章主要介紹了SpringBoot框架aop切面的execution表達(dá)式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • IDEA實(shí)用好用插件推薦及使用方法教程詳解(必看)

    IDEA實(shí)用好用插件推薦及使用方法教程詳解(必看)

    這篇文章主要介紹了IDEA實(shí)用好用插件推薦及使用方法教程,本文通過(guò)實(shí)例截圖相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • SpringBoot參數(shù)校驗(yàn)之@Validated的使用詳解

    SpringBoot參數(shù)校驗(yàn)之@Validated的使用詳解

    這篇文章主要通過(guò)示例為大家詳細(xì)介紹一下介紹了SpringBoot參數(shù)校驗(yàn)中@Validated的使用方法,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-06-06
  • Spring:spring-webmvc和spring-web有哪些區(qū)別

    Spring:spring-webmvc和spring-web有哪些區(qū)別

    這篇文章主要介紹了Spring:spring-webmvc和spring-web有哪些區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Filter、Servlet、Listener的學(xué)習(xí)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Filter、Servlet、Listener的學(xué)習(xí)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了Filter、Servlet、Listener的學(xué)習(xí)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • MyBatis實(shí)現(xiàn)CRUD的示例代碼

    MyBatis實(shí)現(xiàn)CRUD的示例代碼

    本文主要介紹了MyBatis實(shí)現(xiàn)CRUD的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • 一文帶你解讀所有HashMap的面試題

    一文帶你解讀所有HashMap的面試題

    HashMap在面試的時(shí)候,是非常容易被問(wèn)到的。因?yàn)樵贘DK8出來(lái)之后,非常容易被問(wèn)到關(guān)于HashMap的知識(shí)點(diǎn),而如果對(duì)于沒有研究過(guò)他的源代碼的同學(xué)來(lái)說(shuō),這個(gè)可能只是說(shuō)出一部分來(lái)。本文就把HashMap上面大部分會(huì)被在面試中問(wèn)到的內(nèi)容,做個(gè)總結(jié),希望有所幫助
    2022-09-09
  • Java連接MQ實(shí)現(xiàn)信息查詢的操作過(guò)程

    Java連接MQ實(shí)現(xiàn)信息查詢的操作過(guò)程

    本文介紹了如何使用Java連接ApacheRocketMQ實(shí)現(xiàn)信息查詢的功能,通過(guò)編寫Java代碼連接MQ并實(shí)現(xiàn)生產(chǎn)者發(fā)送消息和消費(fèi)者接收并處理消息的過(guò)程,展示了如何在分布式系統(tǒng)中實(shí)現(xiàn)訂單處理系統(tǒng)的解耦,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • SpringBoot接收參數(shù)所有方式總結(jié)

    SpringBoot接收參數(shù)所有方式總結(jié)

    這篇文章主要介紹了SpringBoot接收參數(shù)所有方式總結(jié),文中通過(guò)代碼示例和圖文結(jié)合的方式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-07-07
  • Java實(shí)現(xiàn)FutureTask的示例詳解

    Java實(shí)現(xiàn)FutureTask的示例詳解

    在并發(fā)編程當(dāng)中我們最常見的需求就是啟動(dòng)一個(gè)線程執(zhí)行一個(gè)函數(shù)去完成我們的需求,而在這種需求當(dāng)中,我們需要函數(shù)有返回值。Java給我們提供了這種機(jī)制,去實(shí)現(xiàn)這一個(gè)效果:FutureTask。本文為大家準(zhǔn)備了Java實(shí)現(xiàn)FutureTask的示例代碼,需要的可以參考一下
    2022-08-08

最新評(píng)論