五分鐘帶你學(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ī)器讀寫。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)文章
SpringBoot項(xiàng)目接入MQTT的詳細(xì)指南
MQTT是一種輕量級(jí)的消息傳輸協(xié)議,特別適用于物聯(lián)網(wǎng)(IoT)場(chǎng)景,具有低帶寬、高延遲網(wǎng)絡(luò)環(huán)境下的優(yōu)勢(shì),SpringBoot作為流行的 Java開發(fā)框架,能夠方便地與MQTT集成,實(shí)現(xiàn)高效的消息通信,本文將詳細(xì)介紹如何在SpringBoot項(xiàng)目中接入MQTT,需要的朋友可以參考下2025-03-03
Java訪問(wèn)者設(shè)計(jì)模式詳細(xì)講解
大多數(shù)情況下你不需要訪問(wèn)者模式,但當(dāng)一旦需要訪問(wèn)者模式時(shí),那就是真的需要它了,這是設(shè)計(jì)模式創(chuàng)始人的原話??梢钥闯鰬?yīng)用場(chǎng)景比較少,但需要它的時(shí)候是不可或缺的,這篇文章就開始學(xué)習(xí)最后一個(gè)設(shè)計(jì)模式——訪問(wèn)者模式2022-11-11
Spring Bean生命周期之BeanDefinition的合并過(guò)程詳解
這篇文章主要為大家詳細(xì)介紹了Spring Bean生命周期之BeanDefinition的合并過(guò)程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03
Java基礎(chǔ)學(xué)習(xí)之字符緩沖流的應(yīng)用
這篇文章主要為大家詳細(xì)介紹了Java基礎(chǔ)中的字符緩沖流的相關(guān)應(yīng)用,例如復(fù)制Java文件等,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一2022-09-09
Java集合和IO流實(shí)現(xiàn)水果攤項(xiàng)目
最近閑來(lái)無(wú)事,使用java基礎(chǔ)知識(shí)集合和IO流做了一個(gè)簡(jiǎn)單的小項(xiàng)目,水果攤項(xiàng)目,用到GUI和Mysql數(shù)據(jù)庫(kù)搭建,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-06-06
Java使用MySQL實(shí)現(xiàn)連接池代碼實(shí)例
這篇文章主要介紹了Java使用MySQL實(shí)現(xiàn)連接池代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
解決spring boot2集成activiti6踩過(guò)的坑
這篇文章主要介紹了解決spring boot2集成activiti6踩過(guò)的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09

