【JavaScript】详解JSON
目录结构:
什么是JSON
JSON就是JavaScript Object Notation,即JavaScript对象表示法。
JSON和XML的比较
相同点:
都是存储和交换文本信息的一种方法。
不同点:
JSON 比 XML 更小、更快,更易解析。XML在JSON出现之前,风靡一时,XML有两大主要功能,就是存储数据和传输数据,不过随着时间推移,XML在传输数据方面就显得力不从心了,因此后来诞生的JSON在传输数据方面取代了XML。所以JSON主要用于传输数据,XML主要用于存储数据。关于在ajax中传输JSON可以参考文章浅析Ajax的使用。
JSON的语法
- 数据在“名称:值”对中
- 数据由逗号隔开
- 花括号保存对象
- 方括号保存数组
常见的JSON写法:
var sites = [
{ "name":"百度" , "url":"www.baidu.com" },
{ "name":"Google" , "url":"www.google.com" },
];
或是:
var tx = '{ "sites" : [' +
'{ "name":"百度" , "url":"www.baidu.com" },' +
'{ "name":"Google" , "url":"www.google.com" } ]}';
如何解析JSON文本
当javaScript类写成上面的第二种形势的时候,就需要解析JSON,生成相应的javaScript对象。
1,eval()方法
该方法是javaScript的内置方法,
<!DOCTYPE html>
<html>
<head>
<title>测试JSON</title>
<meta name="content-type" content="text/html; charset=UTF-8">
</head> <body>
<div id="name">
</div>
<script>
var tx = '{ "sites" : [' +
'{ "name":"百度" , "url":"www.baidu.com" },' +
'{ "name":"Google" , "url":"www.google.com" } ]}';
var obj = eval ("(" + tx + ")"); alert(obj.sites[0].name+","+obj.sites[0].url);
</script>
</body>
</html>
访问JSON中数据,有两种方式,一种是通过 对象.key 来获得,比如 obj.sites[0].url ;另一种就是通过 对象["key"] 来获得,比如 obj.sites[0]["key"] 。第一种方式的好处就是简洁,第二种方式的好处就是通过字符串来获得JSON对象的值,这可以应用在需要通过动态拼接一个字符串的key,然后再获得对应值。
2,JSON.parse()方法
只需要将上面的用eval()方法解析的那句替换成如下即可:
var obj = JSON.parse(tx);
关于更多JSON.parse()的用法,读者可以点击这里。
3,JSON数组
在进行Ajax访问数据中,我们常常会对服务端返回回来的JSON数据,进行解析,而JSON数组又是比较常用的,接下来笔者说一说JSON数组的解析。
JSON数组的解析,可以使用for循环,也可使用for...in...循环,
使用for-in访问数组:
<body> <p>你可以使用 for-in 来访问数组:</p> <p id="demo"></p> <script> var myObj, i, x = "";
myObj = {
"name":"网站",
"num":3,
"sites":[ "Google", "Runoob", "Taobao" ]
}; for (i in myObj.sites) {
x += myObj.sites[i] + "<br>";
} document.getElementById("demo").innerHTML = x; </script> </body>
使用for循环访问数组:
<body> <p>使用 for 循环访问数组:</p> <p id="demo"></p> <script> var myObj, i, x = "";
myObj = {
"name":"网站",
"num":3,
"sites":[ "Google", "Runoob", "Taobao" ]
}; for (i = 0; i < myObj.sites.length; i++) {
x += myObj.sites[i] + "<br>";
} document.getElementById("demo").innerHTML = x; </script> </body>
其中 myObj.sites.length 可以获得sites数组的长度。
如何解析JSON对象
如果需要将JSON解析为JSON文本,那么只需要使用函数:
var JSONString = JSON.stringify(JSONObject);
stringify函数不会解析函数,它会删掉对象中的函数,我们可以将函数转化为字符串来解决这个问题
var obj = { "name":"Runoob", "alexa":function () {return 10000;}, "site":"www.runoob.com"};
//将函数转化为字符串
obj.alexa = obj.alexa.toString();
var myJSON = JSON.stringify(obj);
JSON文件
JSON是定义javaScript对象的一种语言,它可以单独写成一个文件,后缀名为“.json”,可以通过脚本语言来解析。
JSONP
什么是JSONP
JSONP(json width padding),json的一种使用模式。
JSONP有什么作用
它可以实现网页从别的域名哪儿获取资料,即跨域读取数据。
为什么使用JSONP
因为同源策略(由NetScape提出的一种安全策略)。
使用JSP实现JSONP
客户端的完整代码:
<!DOCTYPE html>
<html>
<head>
<title>jsonp.html</title> <meta name="content-type" content="text/html; charset=UTF-8"> </head> <body>
<script type="text/javascript"> function jsonpCallback(result){
alert(result[1].name);
} </script>
<script type="text/javascript" src="http://localhost:8080/Jsonp/jsonp.jsp?callback=jsonpCallback"></script> </body>
</html>
服务端的完整代码:
<%
String callback = request.getParameter("callback");
out.print(callback+"([ { name:'John',age:'19'},{ name:'joe',age:'20'}] );");
%>
代码讲解:
调用数据的为客户端,发送数据的称为服务端。客户端在访问服务端的url的代码中,添加一个制定了函数名称的参数,也就是jsonCallback,然后在服务端用getParameter获取数据,最后按照js的语法,输出到流中。在这里读者需要注意,上面服务端的数据就是全部的jsp文件内容了,除了使用jsp,读者还可以使用php或是jquery等技术来实现服务端,但是后缀名和使用的语法必需一致,。更多详细情况,读者可参考“说说JSON和JSONP,你会豁然开朗”或是“JSON和JAVA操作例子”。
java对于JSON的解析
因为json字符串和java中的Map集合对象非常类似,两者之间可以相互转化,不过之前我们先需要导包 gson.jar
将JSON字符串封装为java对象
将字符串转化为Map集合
/*
* 参数1. 要转换为对象的JSON格式字符串
* 参数2. 要转换的对象的类信息
*/
ClassObject = GsonInstance.fromJSON(JSON字符串,Class);
将java对象转化为JSON字符串
将字符串转化字符串使用函数
String str_json=GsonInstance.toJson(Map map);
下面通过java代码来看看:
package cn.gson.test; import java.util.HashMap;
import java.util.Map; import com.google.gson.Gson; public class GSON_TEST {
public static void main(String[] args) {
Map map1=new HashMap();
Map map2=new HashMap();
map2.put("info", "测试json");
map1.put("error", "no");
map1.put("detail", map2); Gson gsoninstance=new Gson();
//将map集合转化为json字符串
String strjson=gsoninstance.toJson(map1);
System.out.println(strjson);//{"detail":{"info":"测试json"},"error":"no"} Map map3=new HashMap();
map3=gsoninstance.fromJson(strjson, Map.class);
System.out.println(map3);//{detail={info=测试json}, error=no}
}
}
GSON_TEST.java
java对于JSON的解析不仅仅只有这一种方式,下面查询天气的demo,我们使用另一种将json字符串转化为java中Map集合
参考文章
http://www.runoob.com/json/json-tutorial.html
http://www.runoob.com/js/js-json.html
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
本文为博主原创文章,如需转载请注明出处。
【JavaScript】详解JSON的更多相关文章
- Day03 javascript详解
day03 js 详解 JavaScript的基础 JavaScript的变量 JavaScript的数据类型 JavaScript的语句 JavaScript的数组 JavaScript的函数 Ja ...
- python详解json模块
我们在做工作中经常会使用到json模块,今天就简单介绍下json模块 什么是json JSON ,全称为JavaScript Object Notation, 也就是JavaScript 对象标记,它 ...
- Unicode与JavaScript详解
本文为转载内容 一.Unicode是什么? Unicode源于一个很简单的想法:将全世界所有的字符包含在一个集合里,计算机只要支持这一个字符集,就能显示所有的字符,再也不会有乱码了. 它从0开始,为每 ...
- javascript 详解数组
概念 数组创建 数组读写 数组 VS. 一般对象 相同点 不同点 稀疏数组 数组的length属性 元素增删 数组迭代 二维数组 数组方法 Array.prototype.join Array.p ...
- 【原创教程】JavaScript详解之语法和对象
JavaScript的好的想法:函数.弱类型.动态对象和一个富有表现力的对象字面量表示法. JavaScript的坏的想法:基于全局变量的编程模型. 好了,不管他是好的还是坏的,都是我的最爱,下面 ...
- JavaScript详解
JavaScript可以说是web开发中必备的一种技术.它具有灵活,简单,高效等特点.这次DRP中大量的用到了js,让自己对js有了更深的了解.看完这个以后还回去看了一下牛腩的js视频.把以前没看的看 ...
- Unicode与JavaScript详解 [很好的文章转]
上个月,我做了一次分享,详细介绍了Unicode字符集,以及JavaScript语言对它的支持.下面就是这次分享的讲稿. 一.Unicode是什么? Unicode源于一个很简单的想法:将全世界所有的 ...
- Web前端之Javascript详解20180330
一.javascript概述 javascript是基于对象和事件的脚本语言. 特点: 1.安全性(不允许直接访问本地硬盘(因为是被远程的浏览器解释)),它可以做的就是信息的动态交互 2.跨平台性(只 ...
- JavaScript: 详解正则表达式之三
在上两篇文章中博主介绍了JavaScript中的正则常用方法和正则修饰符,今天准备聊一聊元字符和高级匹配的相关内容. 首先说说元字符,想必大家也都比较熟悉了,JS中的元字符有以下几种: / \ | . ...
随机推荐
- JavaScript随笔1
1.NaN不等于NaN 2.判断是不是NaN:isNaN; (强制类型转换) 3.parseInt(3.5) ->3 parseInt(3px)->3 4.pareFloat(3.7)- ...
- jquery-懒加载插件
在Web应用程序中,系统的瓶颈常在于系统的响应速度.如果系统响应速度过慢,用户就会出现埋怨情绪, 系统的价值也因此会大打折扣.因此,提高系统响应速度,是非常重要的. 从此可知,再好的网站,再炫的网站, ...
- VS代码提示不出现或者提示变成英文或者各种奇葩问题的解决
万能法==>重置 代码提示变成英文的了 打开开发员命令提示 输入:devenv.exe /setup /resetuserdata /resetsettings 重新打开,会和你第一次安装完毕一 ...
- WPF MVVM下做发送短信小按钮
最近做一个项目,因为涉及到注册,因此需要发送短信,一般发送短信都有一个倒计时的小按钮,因此,就做了一个,在此做个记录. 一.发送消息 没有调用公司的短信平台,只是模拟前台生成一串数字,将此串数字输出一 ...
- 【转】SQL删除重复数据方法,留着备用
感谢孙潇楠前辈的总结,地址http://www.cnblogs.com/sunxiaonan/archive/2009/11/24/1609439.html 例如: id name ...
- Android 文件读写
一.分类 文件读写作为Android四大数据存储方式之一,又分为内部存储和外部存储两种: (1)内部存储(Internal storage): 总是可用. 文件默认情况存储在/data/data/包名 ...
- 虚拟化 - 每天5分钟玩转 OpenStack(2)
OpenStack是云操作系统,要学习OpenStack,首先需要掌握一些虚拟化和云计算的相关知识. 虚拟化 虚拟化是云计算的基础.简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享 ...
- iOS开发之使用Storyboard预览UI在不同屏幕上的运行效果
在公司做项目一直使用Storyboard,虽然有时会遇到团队合作的Storyboard冲突问题,但是对于Storyboard开发效率之高还是比较划算的.在之前的博客中也提到过,团队合作使用Storyb ...
- How to implement a neural network
神经网络的实践笔记 link: http://peterroelants.github.io/posts/neural_network_implementation_part01/ 1. 生成训练数据 ...
- 【原】IOS合并lib(.a)库的终极可用方法(可用于解决duplicate symbol静态库冲突)
网上流传了太多关于合并lib库的方法,自己也尝试过,但大多失败.有感于这种急于解决问题,经过百般尝试后依旧无果的无奈心情,小翁在这里用一个实例来完整阐述如何在mac中合并lib静态库. 这里以移动广告 ...