java缓存同步_浅谈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 fs=new ArrayList();

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

垃圾回收算法以及垃圾回收器_什么是垃圾回收?

垃圾回收算法以及垃圾回收器以下是我们的垃圾收集手册中的一个示例&#xff0c;该手册将在接下来的几周内发布。 同时&#xff0c;花点时间熟悉垃圾收集的基础知识-这将是本书的第一章。 乍一看&#xff0c;垃圾收集应该处理顾名思义的问题–查找并丢弃垃圾。 实际上&#xff…

c语言中fgetc函数的介绍

点击上方蓝字关注我&#xff0c;了解更多咨询1、fgetc函数返回的字符实际上是文件流中位置指针指向的字符。当fgetc函数读取错误时&#xff0c;返回EOF并设置文件错误标志位。2、该函数以无符号char强制转换为int的形式返回读取的字符&#xff0c;如果到达文件末尾或出现读错&a…

java中什么表示打印_在java中打印对象时会发生什么

您不需要调试器就能知道发生了什么.System.out是PrintStream类型.PrintStream.println(Object)的javadoc说&#xff1a;Prints an Object and then terminate the line. This method calls at first String.valueOf(x) to get the printed object’s string value, then behave…

魔术笔反选_魔术二传手反图案

魔术笔反选设置者和获取者是邪恶的。 创建JavaBean定义时&#xff0c;这似乎是个好主意。 但是它们对Java社区造成了很大的伤害。 通常不如null指针那么多&#xff0c;但足够了。 首先&#xff0c;许多初级人员相信实现setter和getter&#xff08;嘿&#xff0c;在Eclispe中只…

花5分钟了解C语言基本语法元素快来

点击上方蓝字关注我&#xff0c;了解更多咨询C语言是一种编程语言&#xff0c;和其它语言一样&#xff0c;也定义了自己的语法和词汇。学习C语言&#xff0c;首先要学习C语言的词汇&#xff0c;再学习C语言的语法规则&#xff0c;然后由词汇构成语句&#xff0c;由语句构成源程…

java8 策略模式_Java 8中的策略模式

java8 策略模式这是两个有关如何使用Java 8功能样式以及Cyclops模式匹配和Hamcrest库来实现策略模式设计的示例。 PrintDependingOnInput方法是一种策略&#xff0c;该策略将根据传递的日志对System.println一些消息。 AddPrefix是另一种策略&#xff0c;它将根据邮件内容向邮…

c语言中ftell函数是什么

点击上方蓝字关注我&#xff0c;了解更多咨询1、C语言函数ftell用于获取文件位置指针当前位置相对于文件首的偏移字节数。2、通过ftell函数获取当前文件的大小&#xff0c;然后通过fread函数读取缓冲区。返回值&#xff0c;如果成功&#xff0c;该函数返回位置标识符的当前值&a…

jdk入门_JDK 9 REPL:入门

jdk入门会议是聚会Java名人的好地方。 Devoxx France是与Java语言架构师&#xff0c;前同事和老朋友Brian Goetz&#xff08; briangoetz &#xff09;见面的一个机会。 我们谈论了JDK 9&#xff0c;而他全都热衷于REPL。 他提到&#xff0c;尽管Java SE 9中有很多重要功能 &am…

c语言中局部变量是什么

点击上方蓝字关注我&#xff0c;了解更多咨询1、函数内部定义的变量称为局部变量&#xff0c;其作用域仅限于函数内部&#xff0c;离开函数后无效&#xff0c;使用后报错。2、局部变量只能在函数内部使用&#xff0c;离开函数后无效&#xff0c;再次使用会报错。实例#include &…

java接口自动化Excel占位符_基于maven+java+TestNG+httpclient+poi+jsonpath+ExtentReport的接口自动化测试框架...

接口自动化框架项目说明本框架是一套基于mavenjavaTestNGhttpclientpoijsonpathExtentReport而设计的数据驱动接口自动化测试框架&#xff0c;TestNG 作为执行器&#xff0c;poi用于读取存放于excel的接口用例&#xff0c;jsonPath用于校验返回值&#xff0c;以及提取返回值。本…

本地构建和自动化构建_构建自动化面板

本地构建和自动化构建上周二&#xff0c;我作为持续讨论&#xff08;&#xff03;c9d9&#xff09;的一部分&#xff0c;参加了一个关于Build Automation主题的在线讨论会&#xff0c;这是一系列有关敏捷&#xff0c;持续交付和DevOps的社区讨论会。 自动化构建流程面临许多挑战…

C语言为什么要定义short,int,long这么多整数类型?

点击上方蓝字关注我&#xff0c;了解更多咨询整数类型有int、short int、long int三种类型&#xff0c;用于需要不同存储空间的整数使用。整数类型有正整数和负整数之分&#xff0c;在C语言中&#xff0c;规定整型的最高位为符号位&#xff0c;最高位为“0”表示正数&#xff0…

java中逗号怎么加_Java中如何将字符串从右至左每三位加一逗号

/*** * 将字符串从右至左每三位加一逗号* ** param str 需要加逗号的字符串* return 以从右至左每隔3位加一逗号显示*/public static String displayWithComma(String str){str new StringBuffer(str).reverse().toString(); // 先将字符串颠倒顺序String str2 "";…

小度拆卸_拆卸invokedynamic

小度拆卸许多Java开发人员认为JDK的第七版有些令人失望。 从表面上看&#xff0c;仅少数语言和库扩展使它成为了发行版&#xff0c;即Project Coin和NIO2 。 但在幕后&#xff0c;该平台的第七个版本对JVM类型系统进行了最大的扩展&#xff0c;这是其最初发行后引入的。 添加in…

c语言中函数参数类型的探究

点击上方蓝字关注我&#xff0c;了解更多咨询函数中的参数个数可以是0&#xff0c;也可以是一个或多个参数。下面我们带着这三种不同的情况&#xff0c;分别在c语言中进行讨论。1、函数没有参数&#xff0c;表示没有参数列表。int func1(); //声明一个函数&#xff0c;该函数…

java rotate怎么用_jQuery旋转插件jqueryrotate用法详解

本文实例讲述了jQuery旋转插件jqueryrotate用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;CSS3 提供了多种变形效果&#xff0c;比如矩阵变形、位移、缩放、旋转和倾斜等等&#xff0c;让页面更加生动活泼有趣&#xff0c;不再一动不动。然后 IE10 以下版本的浏览…

c语言野指针产生的原因

点击上方蓝字关注我&#xff0c;了解更多咨询1、指针变量未初始化&#xff0c;任何指针变量刚被创建时不会自动成为 NULL 指针&#xff0c;它的缺省值是随机的。所以&#xff0c;指针变量在创建的同时应当被初始化&#xff0c;要么将指针设置为 NULL &#xff0c;要么让它指向合…

java rhino_在Java 8中使用Rhino

java rhinoJava将Nashorn作为JSR 223的新JavaScript实现&#xff08;javax.scripting&#xff09;。 尽管这无疑是个好消息&#xff08;通过直接生成Java代码&#xff0c;Nashorn比Rhino快得多&#xff09;&#xff0c;但它也带来了一些挑战&#xff1a; Nashorn与Rhino并非10…

docx 图片预处理 Java_如何在java中将docx文件头图像复制到另一个docx文件中

尝试(未经测试的):void attachHeader(HeaderPart sourcePart, WordprocessingMLPackage targetPkg) throws Docx4JException {HeaderPart newHeaderPart new HeaderPart();newHeaderPart.setContents(XmlUtils.deepCopy(sourcePart.getContents()));if (sourcePart.getRelatio…

c语言中assert函数的使用注意

点击上方蓝字关注我&#xff0c;了解更多咨询1、使用assert检查函数开始时传入参数的合法性。2、每个assert只检验一个条件&#xff0c;因为在同时检验多个条件时&#xff0c;如果断言失败&#xff0c;就无法直观地判断哪个条件失败。实例int resetBufferSize(int nNewSize) {/…