欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-17 10:03:52
json轻量级的数据交换格式 相对于xml来说,json的解析速度更快,文档更小。 json的格式 {属性名:属性值,属性名:属性值,……} 属性名的类型可以是st...

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的数据交换、缓存问题和同步问题的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

上一篇:

下一篇: