五分鐘帶你學(xué)會(huì)用java解析json字符串
在工作中我們常常使用json來(lái)存儲(chǔ)和傳輸結(jié)構(gòu)化的數(shù)據(jù),如用戶信息、配置信息等。它通常以string的方式進(jìn)行傳輸,因此如何將string解析并得到我們想要的信息是一項(xiàng)必備且常用的功能。
JSON(JavaScript Object Notation)是一種輕量級(jí)的、基于文本的、與語(yǔ)言無(wú)關(guān)的數(shù)據(jù)交換格式,易于人和機(jī)器讀寫(xiě)。JSON可以表示兩種結(jié)構(gòu)化類型:對(duì)象和數(shù)組。對(duì)于每一個(gè)對(duì)象,它內(nèi)部的值可以是字符串、整數(shù)、布爾值、空值,以及json對(duì)象和數(shù)組。下面是來(lái)自維基百科的簡(jiǎn)單示例,它顯示了描述一個(gè)人的對(duì)象的JSON 表示。該對(duì)象具有名字和姓氏的字符串值、年齡的數(shù)字值、表示人地址的對(duì)象值以及電話號(hào)碼對(duì)象的數(shù)組值。我們將以此為例說(shuō)明如何在java中解析它。
示例:
{ "firstName": "John", "lastName": "Smith", "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": 10021 }, "phoneNumbers": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" } ] }
引入使用的包:
//引入解析json常用的包 import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.*;
//將jsonStr中的數(shù)據(jù)提取出來(lái),轉(zhuǎn)化成Person類,Person類已經(jīng)根據(jù)json的格式設(shè)定好 public static Person jsonParse(String jsonStr){ //將json string轉(zhuǎn)化為json object JSONObject jo = new JSONObject(jsonStr); //初始化目標(biāo)值 Person person = new Person(); //獲取值為String類型的成員變量 String firstName = jo.getString("firstName"); String lastName = jo.getString("lastName"); person.setFirstName(firstName); person.setLastName(lastName); //獲取值為int類型的成員變量 int age = jo.getInt("age"); person.setAge(age); //獲取值為Object類型的成員變量(如上套娃) //Address類已經(jīng)根據(jù)json的格式設(shè)定好 JSONObject addressObj = jo.getJSONObject("address"); Address address = new Address(); String streetAddress = addressObj.getString("addressObj"); address.setStreetAddress(streetAddress); ... person.setAddress(address); //獲取值為array類型的成員變量 //PhoneNumber類已經(jīng)根據(jù)json的格式設(shè)定好 List<PhoneNumber> phoneNumbers = new ArrayList<PhoneNumber>(); JSONArray phoneNumbersjson = jo.getJSONArray("phoneNumbers"); for(int i=0;i<phoneNumbersjson.length();i++){ //套娃解析其中每一個(gè)對(duì)象 PhoneNumber phoneNumber = new PhoneNumber(); JSONObject phoneNumberObj = phoneNumbersjson.getJSONObject(i); String type = phoneNumberObj.getString("type"); phoneNumber.setType(type); String number = phoneNumberObj.getString("number"); phoneNumber.setType(number); //將解析好的對(duì)象加入數(shù)組 phoneNumbers.add(phoneNumber); } person.setPhoneNumbers(phoneNumbers); }
json的結(jié)構(gòu),無(wú)非是值,或者對(duì)象和數(shù)組的反復(fù)套娃,將這三種類型的解析方法掌握了,便不怕任何復(fù)雜結(jié)構(gòu)的json了。是不是很簡(jiǎn)單?
Reference:
https://www.geeksforgeeks.org/parse-json-java/
總結(jié)
到此這篇關(guān)于用java解析json字符串的文章就介紹到這了,更多相關(guān)java解析json字符串內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Netty組件NioEventLoopGroup創(chuàng)建線程執(zhí)行器源碼解析
這篇文章主要介紹了Netty組件NioEventLoopGroup創(chuàng)建線程執(zhí)行器源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03Java利用正則取標(biāo)簽之間的數(shù)據(jù)
這篇文章主要介紹了Java利用正則取標(biāo)簽之間的數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08SpringBoot測(cè)試配置屬性與web啟動(dòng)環(huán)境超詳細(xì)圖解
Web開(kāi)發(fā)的核心內(nèi)容主要包括內(nèi)嵌的Servlet容器和SpringMVCSpringBoot使用起來(lái)非常簡(jiǎn)潔,大部分配置都有SpringBoot自動(dòng)裝配,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-10-10Java利用樸素貝葉斯分類算法實(shí)現(xiàn)信息分類
貝葉斯分類算法是統(tǒng)計(jì)學(xué)的一種分類方法,它是一類利用概率統(tǒng)計(jì)知識(shí)進(jìn)行分類的算法。本文將利用樸素貝葉斯分類算法實(shí)現(xiàn)信息分類,需要的可以參考一下2022-06-06Spring+Quartz配置定時(shí)任務(wù)實(shí)現(xiàn)代碼
這篇文章主要介紹了Spring+Quartz配置定時(shí)任務(wù)實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04內(nèi)存屏障由來(lái)及實(shí)現(xiàn)思路
這篇文章主要為大家詳細(xì)介紹了內(nèi)存屏障由來(lái)及實(shí)現(xiàn)思路的詳細(xì)講解,讓大家徹底的理解內(nèi)存屏障,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-01-01