【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中的元字符有以下几种: / \ | . ...
随机推荐
- Viewport---响应式 Web 设计----在路上(13)
什么是 Viewport? viewport 是用户网页的可视区域. viewport 翻译为中文可以叫做"视区". 手机浏览器是把页面放在一个虚拟的"窗口"( ...
- iOS---后台运行机制详解
一.iOS的“伪后台”程序 首先,先了解一下iOS 中所谓的「后台进程」到底是怎么回事吧? Let me be as clear as I can be: the iOS multitasking b ...
- HTML的页面IE注释
我们常常会在网页的HTML里面看到形如[if lte IE 9]……[endif]的代码,表示的是限定某些浏览器版本才能执行的语句,那么这些判断语句的规则是什么呢?请看下文: <!--[if ! ...
- DAC Usage2:通过DAC实现DB Schema的Migration和Upgrade
一,Introduce Extract DAC 是从现存的DB中创建DAC,抽取DB Object的definition 和 与之相关的实例级别的元素,比如Login,以及Login 和User之间的 ...
- TSQL Merge On子句和When not matched 语义理解
Merge 的On子句指定Match condition,When子句指定过滤条件,如果Source Table和Targe Table匹配的上,很好理解:如果匹配不上,必须深入理解不匹配的条件,否则 ...
- jQuery2.0.3源码分析系列之(29) 窗口尺寸
.height() .innerHeight() .innerWidth() .outerHeight() .outerWidth() .width() 基础回顾 一般的,在获取浏览器窗口的大小和位置 ...
- Window7下安装Ubuntu 14.04 64bit
本文章主要讲解如何在Windows7操作系统中硬盘安装Ubuntu 14.04 64bit: 1.准备文件 1.ubuntu-14.04.4-desktop-amd64.iso 2.EasyBCD.e ...
- 手机软件Toast无法显示提示信息
近日在做项目时,测试组的同事提出一个bug,就是在一台LG手机上,原本应该显示的Toast信息,都不显示,消息栏也没有出现通知,后来经过查资料知道有些三星.LG手机默认禁用了显示通知那一项,而不显示通 ...
- AngularJS之Dependency Injection(五)
前言 这一节我们来讲讲AngularJS中的依赖注入,在实际开发中Angular提供了具体的方法供我们去调用,但是一旦业务不能满足要求或者出现麻烦或者错误时导致无从下手,所以基于此我们有必要深入一点去 ...
- 解决Select2控件不能在jQuery UI Dialog中不能搜索的bug
本文使用博客园Markdown编辑器进行编辑 1.问题呈现 项目中使用了jQuery UI的Dialog控件,一般用来处理需要提示用户输入或操作的简单页面.逻辑是修改一个广告的图片和标题. 效果截图如 ...