中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java使用JSON進行文件解析的方法

發布時間:2023-11-13 11:50:53 來源:億速云 閱讀:154 作者:栢白 欄目:開發技術

今天小編給大家分享的是Java使用JSON進行文件解析的方法,相信很多人都不太了解,為了讓大家更加了解,所以給大家總結了以下內容,一起往下看吧。一定會有所收獲的哦。

一、什么是JSON

JSON是一種輕量級的數據交換格式。它基于ECMAScript的一個子集,采用完全獨立于編程語言的文本格式來存儲和表示數據。

簡潔和清晰的層次結構是的JSON成為理想的數據交換語言。易于人閱讀和編寫,同時也易于機器解析和生成,并有效地提升網絡傳輸效率。

JSON語法

使用大括號{ }保存對象,每個對象由若干個數據組成;

每個數據由key:value鍵值對組成;

數據之間使用逗號分隔;

使用 \ 進行特殊字符的轉義

例如:

{"reason":
"success","result":
[{"id":1,"firstLetter":"A","brandName":"奧迪","brandLogo":"http"},
{"id":2,"firstLetter":"A","brandName":"雷克薩斯","brandLogo":"http"},
{"id":3,"firstLetter":"A","brandName":"奔馳","brandLogo":"ghjvh"}]

二、JSON的用途

JSON作為一種輕量級的數據格式,它的主要用途是在計算機系統之間進行數據的傳遞。

JSON作為數據傳輸的格式,有幾個顯著的優點:

(1)JSON只允許使用UTF-8編碼,不存在編碼問題;

(2)JSON內容僅包含key-value鍵值對,格式簡單,不存在冗余結構,是一種輕量級結構;

(3)瀏覽器內置JSON支持,如果把數據用JSON發送給瀏覽器,可以用JavaScript直接處理;

所以,開發web應用的時候,使用JSON作為數據傳輸,在瀏覽器端非常方便。因為JSON非常適合JavaScript處理,所以,絕大多數REST API都選擇JSON作為數據傳輸格式。

在使用Java進行應用程序的開發中,可能會遇到“將Java對象轉換成JSON格式”或者“將JSON格式的數據轉換成Java對象”的需求。

常用于解析JSON的第三方庫有

  • Jackson

  • Gson

  • Fastjson

三、如何應用JSON

在應用JSON時我們最常用Fastjson這個庫,Fastjson是阿里巴巴的開源JSON解析庫,它可以解析JSON格式的字符串,支持將Java Bean序列化微JSON字符串,也可以從JSON字符串反序列化到JavaBean。

Fastjson主要使用JSON、jsonObject、jsonArrary三個類。其中JSONArray和JSONObject繼承自JSON。

JSON類

JSON類的作用主要是用于原始轉換,常用方法有:

Java對象“序列化“(轉換)為JSON字符串。

使用:JSON.toJSONString(Object object),如果需要定義json中的key,可以使用@JSONField注解在成員變量進行設置

//實體數據
PoliceStation ps1=new PoliceStation();
		ps1.setName("電子城派出所");
		ps1.setAddr("雁塔區電子二路");
		ps1.setTel("1234567890");
		//序列化:將Java對象轉換成json格式的數據
		String s1=JSON.toJSONString(ps1);
		System.out.println(s1);

將JSON字符串反序列化為Java對象

JSON.parseObject(String text)

//反序列化:將json格式的字符串轉換成Java對象
		String s2="{\"addr\":\"雁塔區電子二路\",
                        \"name\":\"電子城派出所\",
                         \"tel\":\"1234567890\"}\r\n }";
		PoliceStation ps2= JSON.parseObject(s2,PoliceStation.class);
		System.out.println(ps2);

JSON.parseArray(String text)

// json格式數據
String jsonStr = "[{ \"name\": \"文保分局滬東高校派出所\", \"addr\": \"中山北一路801號\", 			\"tel\": \"22027732\" 		}, { 			\"name\": \"文保分局滬西高校派出所\", 			\"addr\": \"芙蓉江路55號\", 			\"tel\": \"62751704\" 		}, { 			\"name\": \"水上公安局吳淞水上派出所\", 			\"addr\": \"淞浦路187號\", 			\"tel\": \"56671442\" 		}, { 			\"name\": \"水上公安局楊浦水上派出所\", 			\"addr\": \"楊樹浦路1291號\", 			\"tel\": \"65898004\" 		}, { 			\"name\": \"水上公安局外灘水上派出所\", 			\"addr\": \"中山東二路8弄3號\", 			\"tel\": \"63305388\" 		}, { 			\"name\": \"水上公安局石洞口水上派出所\", 			\"addr\": \"盛石路18號\", 			\"tel\": \"56152176\" 		}, { 			\"name\": \"軌道分局上海火車站站派出所\", 			\"addr\": \"共和新路2838號\", 			\"tel\": \"56650472\" 		}, { 			\"name\": \"軌道分局徐家匯站派出所\", 			\"addr\": \"滬閔路6707號\", 			\"tel\": \"63189188*70246\" 		}, { 			\"name\": \"軌道分局人民廣場站派出所\", 			\"addr\": \"南京西路19號\", 			\"tel\": \"63189188*76369\" 		}, { 			\"name\": \"軌道分局陸家嘴站派出所\", 			\"addr\": \"龍陽路1990號乙\", 			\"tel\": \"63189188*27132\" 		}, { 			\"name\": \"軌道分局宜山路站派出所\", 			\"addr\": \"零陵路668號\", ... \"崇明縣公安局新村派出所\", 			\"addr\": \"新村鄉新中村新躍160號\", 			\"tel\": \"59650598\" 		}, { 			\"name\": \"崇明縣公安局新海派出所\", 			\"addr\": \"新海農場場部北側\", 			\"tel\": \"59655712\" 		}, { 			\"name\": \"崇明縣公安局長征派出所\", 			\"addr\": \"長征農場派出所生活區長征農場場部\", 			\"tel\": \"59311459\" 		}, { 			\"name\": \"崇明縣公安局長江派出所\", 			\"addr\": \"東風農場林風公路1579號\", 			\"tel\": \"59641914\" 		}, { 			\"name\": \"崇明縣公安局東旺派出所\", 			\"addr\": \"前哨農場前哨公路18號\", 			\"tel\": \"59471109\" 		}, { 			\"name\": \"崇明縣公安局東灘濕地保護區治安派出所\", 			\"addr\": \"陳家鎮瀛陳公路崇明縣團結沙\", 			\"tel\": \"59404611\" 		}, { 			\"name\": \"崇明縣公安局長興派出所\", 			\"addr\": \"長興鎮海舸路659號\", 			\"tel\": \"56851431\" 		}, { 			\"name\": \"崇明縣公安局橫沙派出所\", 			\"addr\": \"民東路1588號\", 			\"tel\": \"24060670\" 		}]";
List<PoliceStation> stationList = JSON.parseArray(jsonStr, PoliceStation.class);
for(PoliceStation ps : stationList) {
    System.out.println("警局名稱:" + ps.getName());
    System.out.println("警局地址:" + ps.getAddr());
    System.out.println("聯系電話:" + ps.getTel());
}

常見問題

問題1:FastJson默認過濾null值,不顯示null字段

Map<String, Object> map = new HashMap<String, Object>(){
    {
        put("age", 20);
        put("name", "灰灰");
        put("sex", null);
    }
};
System.out.println(JSONObject.toJSONString(map));
//輸出結果
{"name:"灰灰","age":20}

解決方法:轉換成JSON字符串時,使用Feature枚舉值進行設置

Map<String, Object> map = new HashMap<String, Object>(){
    {
        put("age", 20);
        put("name", "灰灰");
        put("sex", null);
    }
};
// 使用Feature類型的枚舉值進行設置
System.out.println(JSONObject.toJSONString(map,Feature.WriteMapNullValue));

Java使用JSON進行文件解析的方法

問題2:控制JSON的字段順序

//實體類
public class PoliceStation {
	private String name;
	private String addr;
	private String tel;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}
	public String getTel() {
		return tel;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
}
//測試類
PoliceStation ps = new PoliceStation();
ps.setName("電子城派出所");
ps.setAddr("雁塔區電子二路343號");
ps.setTel("13324554332");
System.out.println(JSON.toJSONString(ps));
//輸出結果
{"addr":"雁塔區電子二路343號","name":"電子城派出所","tel":"13324554332"}

解決方法:輸出結果與字段定義順序不一致,需要在定義實體類字段時,使用@JSONField注解的ordinal屬性進行順序配置

import com.alibaba.fastjson2.annotation.JSONField;
public class PoliceStation {
	@JSONField(ordinal = 1)
	private String name;
	@JSONField(ordinal = 2)
	private String addr;
	@JSONField(ordinal = 3)
	private String tel;
}

問題3:控制JSON的Date字段格式

//實體類
// 訂單類
public class Order{
    // 訂單編號
	private String orderId;
    // 創建日期
	private LocalDateTime creationTime;
	public Order() {
		this.orderId = UUID.randomUUID().toString();
		this.creationTime = LocalDateTime.now();
	}
	public String getOrderId() {
		return orderId;
	}
	public void setOrderId(String orderId) {
		this.orderId = orderId;
	}
	public LocalDateTime getCreationTime() {
		return creationTime;
	}
	public void setCreationTime(LocalDateTime creationTime) {
		this.creationTime = creationTime;
	}
}
//測試類
public class Test {
	public static void main(String[] args) {
		Order order1 = new Order();
		String json = JSON.toJSONString(order1);
		System.out.println(json);
	}
}
//輸出結果
{"creationTime":"2022-07-10 19:39:07.377","orderId":"dbee4f0c-ced7-463f-b19b-c83234cbd5b0"}

解決方法:輸出日期字段時,默認格式不符合需求時,可以在定義實體類的Date字段,使用@jsonFie注解的format屬性進行格式配置

// 訂單類
public class Order{
	// 訂單編號
	private String orderId;
	// 創建日期
	@JSONField(format = "yyyy-MM-dd HH:mm:ss")
	private LocalDateTime creationTime;
}

關于Java使用JSON進行文件解析的方法就分享到這里了,希望以上內容可以對大家有一定的參考價值,可以學以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

齐齐哈尔市| 利川市| 正宁县| 嘉荫县| 集安市| 治多县| 盐城市| 达日县| 项城市| 乌鲁木齐县| 济宁市| 孙吴县| 谷城县| 绥阳县| 吴忠市| 晋州市| 手游| 怀安县| 五河县| 大丰市| 土默特右旗| 从化市| 龙口市| 永丰县| 甘南县| 阿拉尔市| 黄骅市| 广宗县| 江油市| 衢州市| 应用必备| 九龙城区| 常德市| 那坡县| 乌拉特前旗| 天祝| 静海县| 安西县| 明光市| 灵山县| 连南|