加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

浅谈JSON的数据交换、缓存问题和同步问题

发布时间:2020-12-14 20:13:41 所属栏目:Java 来源:网络整理
导读:JSON轻量级的数据交换格式 相对于XML来说,JSON的解析速度更快,文档更

JSON轻量级的数据交换格式

相对于XML来说,JSON的解析速度更快,文档更小。

JSON的格式

{属性名:属性值,属性名:属性值,……}

属性名的类型可以是string,number,boolean,null,object,且属性名必须用双引号引起来,如果属性值是字符串,也必须用双引号括起来。

JSON表示数组

格式:[value,value,value],其中value可以是基本的数据类型,也可以是object类型、数组类型

数组类型

[ 
{“name”:”yangjq”,”age”:22},{“name”:”andreny”,”age”:21} 
];
对象类型

[ 
“name”:”andreny”,“hobby”:[“sing”,”dance”,”eat”] 
]

转换

graph LR
JSON字符串-->JavaScript对象

1.使用JavaScript的原生函数:eval(),不过此方法有危险,使用需谨慎。

var str={"name":"yangjq","age":23};
var obj=eval("("+str+")");
alert(obj.name);

2.使用原生对象JSON提供的parse()方法,如果这个对象无效,说明你浏览器版本太低了!!!

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对象转换为JSON字符串

graph LR
JSON对象-->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在发送请求时涉及的缓存问题

==注==:IE浏览器提供的AJAX对象在发送请求时会先检查是否访问过该地址,如果访问过,那么浏览器就不再发送请求。

不同浏览器对待缓存的机制

Chrome 继续发送请求
Firefox 继续发送请求
IE浏览器 不再发送请求

怎么防止浏览器因为缓存而不发送请求呢?

在请求地址后面添加一个随机数

xhr.open('get','getNumber.do?+Math.random(),true);

发送post请求

关于同步的一些问题

在发送同步请求后,浏览器要等待服务器的响应到达后才能继续在页面中操作。AJAX在发送同步请求的时候,浏览器会锁定当前页面。

测试代码

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对象转换为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集合转换为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集合转换为JSON字符串------n"+fs);
		System.out.println(ja.toString());
	}
	// JSON字符串转换为java对象
	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字符串转换为java对象------n"+obj.toString());
		System.out.println(friend);
	}
	// JSON字符串转换为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字符串转换为java集合---------");
		for (Friend f:friends){
			System.out.println(f);
		}
	}
}

运行结果:

---------------
{"age":23,"name":"andreny"}
-----JSON集合转换为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字符串转换为java对象------
{"name":"andreny","age":22}
Friend [name=andreny,age=22]
--------JSON字符串转换为java集合---------
Friend [name=yangjq,age=22]
Friend [name=andreny,age=23]

总结

以上就是本文关于浅谈JSON的数据交换、缓存问题和同步问题的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读