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

java缓存同步_浅谈JSON的数据交换、缓存问题和同步问题相关推荐

  1. java 多线程同步_浅谈Java多线程(状态、同步等)

    Java多线程是Java程序员必须掌握的基本的知识点,这块知识点比较复杂,知识点也比较多,今天我们一一来聊下Java多线程,系统的整理下这部分内容. 一.Java中线程创建的三种方式: 1.通过继承T ...

  2. java对象头_浅谈java对象结构 对象头 Markword

    概述 对象实例由对象头.实例数据组成,其中对象头包括markword和类型指针,如果是数组,还包括数组长度; | 类型 | 32位JVM | 64位JVM| | ------ ---- | ----- ...

  3. java bitset用途_浅谈Java BitSet使用场景和代码示例

    搜索热词 @H_502_0@一.什么是BitSet? @H_502_0@ 注:以下内容来自JDK API: @H_502_0@ BitSet类实现了一个按需增长的位向量.位Set的每一个组件都有一个b ...

  4. java list数组排序_浅谈对象数组或list排序及Collections排序原理

    常需要对list进行排序,小到List,大到对自定义的类进行排序.不需要自行归并或堆排序.简单实现一个接口即可. 本文先会介绍利用Collections对List进行排序,继而讲到Collection ...

  5. java手动回收_浅谈java是如何做资源回收补救的

    学习java的过程,我们经常谈论一个对象的回收,尤其是资源类型,如果没有显示的关闭,对象就被回收了,说明出现了资源泄漏.java本身为了防止这种情况,做了一些担保的方式,确保可以让未关闭的资源合理回收 ...

  6. java同名函数_浅谈Java 继承接口同名函数问题

    在Java中如果一个类同时继承接口A与B,并且这两个接口中具有同名方法,会怎么样? 动手做实验: interface A{ void fun(); } interface B{ void fun(); ...

  7. 内外网映射 html缓存问题_浅谈内存映射

    写在前面:这是本人初入研究方法时做的笔记作为学习的输出,其中可能存在一些认知上的错误.若您有自己的见解,希望你可以在本文结尾给我留言或直接邮件联系我,与我讨论. 谢谢! email:zhaos@nbj ...

  8. java扫码枪键盘_浅谈在react中如何实现扫码枪输入

    触发原理 原理就是监听键盘输入,比如扫一个为6970596130126的69条形码,用扫码枪扫一下会在光标位置依次输出: 6 9 7 0 5 9 6 1 3 0 2 6 但这不是完整的,所以需要写一个 ...

  9. 00005在java结果输出_浅谈Java反序列化漏洞原理(案例未完善后续补充)

    摘要: 0005,这个16进制流基本上也意味者java反序列化的开始:(2)HTTP:必有rO0AB,其实这就是aced0005的base64编码的结果:以上意味着存在Java反序列化,可尝试构造pa ...

最新文章

  1. Flutter切换tab后保留tab状态
  2. Javascript:字符串分割split()妙用
  3. jQ.Mobi框架介绍
  4. 【网络安全】一些webshell免杀的技巧
  5. 前端学习(1741):前端调试值之元素状态改变的监听方法
  6. 2018 年你需要知道的 11 个 JavaScript 库
  7. 惠普计算机笔记本打印机官网,HP2621打印机驱动
  8. 数字几何处理作业1:编程实现三角网格上高斯曲率和平均曲率的计算编程部分
  9. 一键打造全栈式小程序开发者!
  10. 一道头条面试题,小夕差点没读懂题目,找出数组中缺失的数字,最近击败100%的用户!...
  11. 计算机语言中交集符号,数学相交符号
  12. OneDrive文件数限制:150000
  13. ibm tivoli_在Tivoli Access Manager环境中管理TDS 6.0代理服务器并进行故障排除
  14. [感动]知道我为什么喜欢SUPER JUNIOR吗?
  15. windows 完成端口
  16. 成都盛铭轩:怎么打造产品差异化
  17. 编程练习:编写一个函数,用于计算某长方形面积的函数
  18. C++第一天(编写第一个程序,变量与常量)
  19. 示波器相关术语介绍(上)
  20. C语言学习专栏(1):易忘点

热门文章

  1. 春天重试,因为冬天来了
  2. java java编码_Java编码约定被认为是有害的
  3. hibernate 懒加载_Hibernate懒/急加载示例
  4. 用Java测试多线程代码
  5. 红帽JBoss BRMS和BPMS富客户端框架展示了与GWT / Errai / UberFire和AngularJS的多语言集成...
  6. JDK 7的算法和数据结构
  7. 方法内联在JVM中有多积极?
  8. Java死锁故障排除和解决
  9. 具有可执行Tomcat的独立Web应用程序
  10. Spring3国际化和本地化