淺談JSON的數(shù)據(jù)交換、緩存問(wèn)題和同步問(wèn)題
JSON輕量級(jí)的數(shù)據(jù)交換格式
相對(duì)于XML來(lái)說(shuō),JSON的解析速度更快,文檔更小。
JSON的格式
{屬性名:屬性值,屬性名:屬性值,……}
屬性名的類型可以是string,number,boolean,null,object,且屬性名必須用雙引號(hào)引起來(lái),如果屬性值是字符串,也必須用雙引號(hào)括起來(lái)。
JSON表示數(shù)組
格式:[value,value,value],其中value可以是基本的數(shù)據(jù)類型,也可以是object類型、數(shù)組類型
數(shù)組類型
[
{“name”:”yangjq”,”age”:22},
{“name”:”andreny”,”age”:21}
];
對(duì)象類型 [ “name”:”andreny”, “hobby”:[“sing”,”dance”,”eat”] ]
轉(zhuǎn)換
graph LR JSON字符串-->JavaScript對(duì)象
1.使用JavaScript的原生函數(shù):eval(),不過(guò)此方法有危險(xiǎn),使用需謹(jǐn)慎。
var str={"name":"yangjq","age":23};
var obj=eval("("+str+")");
alert(obj.name);
2.使用原生對(duì)象JSON提供的parse()方法,如果這個(gè)對(duì)象無(wú)效,說(shuō)明你瀏覽器版本太低了?。。?/p>
var str={"name":"andreny","age":22};
var obj=JSON.parse(str);
alert(obj.name);
3.使用JSON.js文件為字符串增加的方法。
var str={"name":"逗比的二哈","age":9};
var obj=str.parseJSON();
alert(obj.name);
JSON對(duì)象轉(zhuǎn)換為JSON字符串
graph LR JSON對(duì)象-->JSON字符串
利用JSON官方提供的API:JSONObject,JSONArray提供的方法
//第一種方式
Emp emp=new Emp("1","andreny","man");
JSONObject obj=JSONObject.fromObject(emp);
String jsonStr=obj.toString();
//第二種方式
var obj={"name":"yangjq","age":23};
var str1=obj.toJSONString();
//第三種方式
var str2=obj.JSON.stringify();
AJAX在發(fā)送請(qǐng)求時(shí)涉及的緩存問(wèn)題
==注==:IE瀏覽器提供的AJAX對(duì)象在發(fā)送請(qǐng)求時(shí)會(huì)先檢查是否訪問(wèn)過(guò)該地址,如果訪問(wèn)過(guò),那么瀏覽器就不再發(fā)送請(qǐng)求。
不同瀏覽器對(duì)待緩存的機(jī)制
Chrome 繼續(xù)發(fā)送請(qǐng)求
Firefox 繼續(xù)發(fā)送請(qǐng)求
IE瀏覽器 不再發(fā)送請(qǐng)求
怎么防止瀏覽器因?yàn)榫彺娑话l(fā)送請(qǐng)求呢?
在請(qǐng)求地址后面添加一個(gè)隨機(jī)數(shù)
xhr.open('get','getNumber.do?+Math.random(),true);
發(fā)送post請(qǐng)求
關(guān)于同步的一些問(wèn)題
在發(fā)送同步請(qǐng)求后,瀏覽器要等待服務(wù)器的響應(yīng)到達(dá)后才能繼續(xù)在頁(yè)面中操作。AJAX在發(fā)送同步請(qǐng)求的時(shí)候,瀏覽器會(huì)鎖定當(dāng)前頁(yè)面。
測(cè)試代碼
package yangjq.test;
import java.util.ArrayList;
import java.util.List;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import yangjq.entity.Friend;
public class JSONtest {
public static void main(String[] args) {
System.out.println("---------------");
test1();
test2();
test3();
test4();
}
// java對(duì)象轉(zhuǎn)換為json字符串
public static void test1(){
Friend f=new Friend();
f.setName("andreny");
f.setAge(23);
JSONObject obj=JSONObject.fromObject(f);
System.out.println(obj.toString());
}
// JSON集合轉(zhuǎn)換為JSON字符串
public static void test2(){
List<Friend> fs=new ArrayList<Friend>();
for (int i=0;i<10;i++){
Friend f=new Friend();
f.setName("yangjq"+i);
f.setAge(12+i);
fs.add(f);
}
JSONArray ja=JSONArray.fromObject(fs);
System.out.println("-----JSON集合轉(zhuǎn)換為JSON字符串------\n"+fs);
System.out.println(ja.toString());
}
// JSON字符串轉(zhuǎn)換為java對(duì)象
public static void test3(){
String jsonStr="{\"name\":\"andreny\",\"age\":22}";
JSONObject obj=JSONObject.fromObject(jsonStr);
Friend friend=(Friend) JSONObject.toBean(obj,Friend.class);
System.out.println("-------JSON字符串轉(zhuǎn)換為java對(duì)象------\n"+obj.toString());
System.out.println(friend);
}
// JSON字符串轉(zhuǎn)換為java集合
public static void test4(){
String jsonStr="[{\"name\":\"yangjq\",\"age\":22}," +
"{\"name\":\"andreny\",\"age\":23}]";
JSONArray obj=JSONArray.fromObject(jsonStr);
List<Friend> friends=(List<Friend>) JSONArray.toCollection(obj,Friend.class);
System.out.println("--------JSON字符串轉(zhuǎn)換為java集合---------");
for (Friend f:friends){
System.out.println(f);
}
}
}
運(yùn)行結(jié)果:
---------------
{"age":23,"name":"andreny"}
-----JSON集合轉(zhuǎn)換為JSON字符串------
[Friend [name=yangjq0, age=12], Friend [name=yangjq1, age=13], Friend [name=yangjq2, age=14], Friend [name=yangjq3, age=15], Friend [name=yangjq4, age=16], Friend [name=yangjq5, age=17], Friend [name=yangjq6, age=18], Friend [name=yangjq7, age=19], Friend [name=yangjq8, age=20], Friend [name=yangjq9, age=21]]
[{"age":12,"name":"yangjq0"},{"age":13,"name":"yangjq1"},{"age":14,"name":"yangjq2"},{"age":15,"name":"yangjq3"},{"age":16,"name":"yangjq4"},{"age":17,"name":"yangjq5"},{"age":18,"name":"yangjq6"},{"age":19,"name":"yangjq7"},{"age":20,"name":"yangjq8"},{"age":21,"name":"yangjq9"}]
-------JSON字符串轉(zhuǎn)換為java對(duì)象------
{"name":"andreny","age":22}
Friend [name=andreny, age=22]
--------JSON字符串轉(zhuǎn)換為java集合---------
Friend [name=yangjq, age=22]
Friend [name=andreny, age=23]
總結(jié)
以上就是本文關(guān)于淺談JSON的數(shù)據(jù)交換、緩存問(wèn)題和同步問(wèn)題的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
相關(guān)文章
Springboot Thymeleaf實(shí)現(xiàn)HTML屬性設(shè)置
這篇文章主要介紹了Springboot Thymeleaf實(shí)現(xiàn)HTML屬性設(shè)置,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2007-11-11
java去除重復(fù)對(duì)象的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇java去除重復(fù)對(duì)象的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
Elasticsearch Join字段類型簡(jiǎn)單快速上手教程
這篇文章主要為大家介紹了Elasticsearch Join字段類型簡(jiǎn)單快速上手教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
Java實(shí)現(xiàn)調(diào)用第三方相關(guān)接口
最近在做一個(gè)項(xiàng)目,需要調(diào)用第三方接口,本文主要介紹了Java實(shí)現(xiàn)調(diào)用第三方相關(guān)接口,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09
Hibernate環(huán)境搭建與配置方法(Hello world配置文件版)
這篇文章主要介紹了Hibernate環(huán)境搭建與配置方法,這里演示Hello world配置文件版的具體實(shí)現(xiàn)步驟與相關(guān)代碼,需要的朋友可以參考下2016-03-03
springboot整合mybatis中的問(wèn)題及出現(xiàn)的一些問(wèn)題小結(jié)
這篇文章主要介紹了springboot整合mybatis中的問(wèn)題及出現(xiàn)的一些問(wèn)題小結(jié),本文給出了解決方案,需要的朋友可以參考下2018-11-11
你知道怎么用Spring的三級(jí)緩存解決循環(huán)依賴嗎
這篇文章主要為大家詳細(xì)介紹了Spring的三級(jí)緩存解決循環(huán)依賴,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-02-02

