關(guān)于Java跨域Json字符轉(zhuǎn)類對(duì)象的方法示例
前言
JSON是JavaScript Object Notation的縮寫,是一種輕量級(jí)的數(shù)據(jù)交換形式,是一種XML的替代方案,而且比XML更小,更快而且更易于解析。因?yàn)镴SON描述對(duì)象的時(shí)候使用的是JavaScript語法,它是語言和平臺(tái)獨(dú)立的,并且這些年許多JSON的解析器和類庫被開發(fā)出來。
JSON具有以下這些形式:
對(duì)象是一個(gè)無序的“‘名稱/值'對(duì)”集合。一個(gè)對(duì)象以“{”(左括號(hào))開始,“}”(右括號(hào))結(jié)束。每個(gè)“名稱”后跟一個(gè)“:”(冒號(hào));“‘名稱/值' 對(duì)”之間使用“,”(逗號(hào))分隔。
值的有序列表(An ordered list of values)。在大部分語言中,它被實(shí)現(xiàn)為數(shù)組(array),矢量(vector),列表(list),序列(sequence)。
這些都是常見的數(shù)據(jù)結(jié)構(gòu)。目前,絕大部分編程語言都以某種形式支持它們。這使得在各種編程語言之間交換同樣格式的數(shù)據(jù)成為可能。
對(duì)于從其他服務(wù)器的url獲得數(shù)據(jù),我們一般都為json數(shù)據(jù)傳輸,比如服務(wù)器B要從服務(wù)器A的url獲得分頁信息,得到j(luò)son字符后如果可以方便快捷操作要轉(zhuǎn)為自己的java對(duì)象。
在此我試過三種轉(zhuǎn)json的第三方,一種google的gson,這種好像無法轉(zhuǎn)成功,一直報(bào)json格式錯(cuò)誤,但校驗(yàn)一直通過正確,嘗試失敗。第二種是net.sf.json的,這種就是無報(bào)錯(cuò),但是對(duì)象的值一直為空。只有json-simple可以成功轉(zhuǎn)對(duì)象
解析json
首先,我們要解析json,查看json是否為標(biāo)準(zhǔn)的json格式,我們可以在網(wǎng)上的很多在線格式化查看json,解析json為對(duì)象一般都換湯不換藥。
第一:就是要知道json結(jié)構(gòu),這里我先開啟服務(wù)器A從他的url得到一串json數(shù)據(jù)。

把復(fù)制json數(shù)據(jù)把它扔在格式化工具可以很清楚的看出結(jié)構(gòu):
{
"eventList": [
{
"id": 1030,
"eventId": "1508779115818499700",
"createTime": 1508779115000,
"endTime": 1508865480000,
"eventContent": "123",
"openid": "o4eWZ06xzHW6mc2gMZMYVDEtx1zk"
},
{
"id": 1029,
"eventId": "1508382907251660498",
"createTime": 1508382906000,
"endTime": 1508383020000,
"eventContent": "ahhhhh",
"openid": "o4eWZ06xzHW6mc2gMZMYVDEtx1zk"
},
{
"id": 1028,
"eventId": "1508308708414580378",
"createTime": 1508308721000,
"endTime": 1508309040000,
"eventContent": "30",
"openid": "o4eWZ06xzHW6mc2gMZMYVDEtx1zk"
},
{
"id": 1027,
"eventId": "1508308463330664814",
"createTime": 1508308480000,
"endTime": 1508308560000,
"eventContent": "28",
"openid": "o4eWZ06xzHW6mc2gMZMYVDEtx1zk"
},
{
"id": 1026,
"eventId": "1508308463017144213",
"createTime": 1508308479000,
"endTime": 1508308560000,
"eventContent": "27",
"openid": "o4eWZ06xzHW6mc2gMZMYVDEtx1zk"
}
],
"page": "1",
"size": "5",
"isHasPage": "1"
}
第二:根據(jù)結(jié)構(gòu)創(chuàng)建對(duì)應(yīng)的實(shí)體類
import com.yhn.consumer.entity.Event;
import lombok.Data;
import org.json.simple.JSONObject;
import java.io.Serializable;
import java.util.List;
@Data
public class EventVO implements Serializable{
private List<Event> eventList;
private String page;
private String size;
private String isHasPage;
public EventVO(JSONObject object){ //構(gòu)造器方法給對(duì)象賦值
eventList = (List<Event>)object.get("eventList");
page = (String)object.get("page");
size = (String)object.get("size");
isHasPage = (String)object.get("isHasPage");
}
}
因?yàn)槭莾?nèi)嵌結(jié)構(gòu),下面這個(gè)是private List<Event> eventList中的Event類;
import lombok.Data;
import org.hibernate.annotations.DynamicUpdate;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.io.Serializable;
import java.util.Date;
@Entity
@Data
@DynamicUpdate //自動(dòng)更新時(shí)間字段
public class Event implements Serializable { //這是EventVO里L(fēng)ist中的Event
@Id
@GeneratedValue
private Integer id; //排序作用
private String eventId; //事件id
private Date createTime; //創(chuàng)建時(shí)間
private Date endTime; //更新時(shí)間
private String eventContent; //提醒事件內(nèi)容
private String openid; //用戶id
}
測(cè)試類
接下來結(jié)構(gòu)也寫好了,將在服務(wù)器B寫單元測(cè)試看看是否能夠成功賦值
@Test
public void clientDemo()throws Exception {
StringBuilder json = new StringBuilder();
URL urlObject = new URL("http://127.0.0.1/meetingSign/test/server?openid=o4eWZ06xzHW6mc2gMZMYVDEtx1zk&page=2&size=5"); //指定URL
HttpURLConnection uc = (HttpURLConnection) urlObject
.openConnection(); //開啟連接
BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream(), "utf-8"));
String inputLine = null;
while ((inputLine = in.readLine()) != null) {
json.append(inputLine); //拼接json
}
in.close();
uc.disconnect();
System.out.println(json); //查看是否拿到。
//去除可能含編碼UTF-8等,因?yàn)榭赡芎蠦om頭文件。
String result = formatString(json.toString());
JSONParser parser=new JSONParser();
org.json.simple.JSONObject data = new org.json.simple.JSONObject();
data = (org.json.simple.JSONObject) parser.parse(result);
EventVO eventVO = new EventVO(data); //把值傳進(jìn)去
log.info("eventVO={}",eventVO);
}
/**
* 去除bom報(bào)頭
*/
public static String formatString(String s) {
if (s != null) {
s = s.replaceAll("\ufeff", "");
}
return s;
}
測(cè)試結(jié)果
是成給對(duì)象賦值了

總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Spring Cache監(jiān)控配置與使用規(guī)范的建議
這篇文章主要介紹了Spring Cache監(jiān)控配置與使用規(guī)范的建議,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
解決Spring Boot 在localhost域奇怪的404問題(Mac book pro)
這篇文章主要介紹了解決Spring Boot 在localhost域奇怪的404問題(Mac book pro),需要的朋友可以參考下2017-09-09
java對(duì)接支付寶支付接口開發(fā)詳細(xì)步驟
本文主要介紹了java對(duì)接支付寶支付接口開發(fā)詳細(xì)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
Spring boot 默認(rèn)靜態(tài)資源路徑與手動(dòng)配置訪問路徑的方法
這篇文章主要介紹了Spring boot 默認(rèn)靜態(tài)資源路徑與手動(dòng)配置訪問路徑的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05
教你用MAT工具分析Java堆內(nèi)存泄漏問題的解決方法
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識(shí),文章圍繞著如何使用MAT工具分析Java堆內(nèi)存泄漏問題的解決方法展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06
Spring中的后置處理器BeanPostProcessor詳解
這篇文章主要介紹了Spring中的后置處理器BeanPostProcessor詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
Spring通過配置文件和注解實(shí)現(xiàn)屬性賦值
這篇文章主要介紹了Spring通過配置文件和注解實(shí)現(xiàn)屬性賦值,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04

