【JavaScript】详解JSON
目录结构:
- 什么是JSON
- JSON和XML的比较
- 相同点
- 不同点
- JSON语法
- 如何解析JSON文本
- eval()方法
- JSON.parse()方法
- JSON数组
- JSON文件
- JSONP
- 1.什么是JSONP
- 2.JSONP有什么作用
- 3.为什么使用JSONP
- 4.使用jsp实现JSONP
- 1.客户端完整代码
- 2.服务端完整代码
- 3.代码讲解
- java对于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
本文为博主原创文章,如需转载请注明出处。
转载于:https://www.cnblogs.com/HDK2016/p/6171222.html
【JavaScript】详解JSON相关推荐
- 【JavaScript详解】一文掌握JavaScript基础知识(上)
JavaScript基础 前言 一.什么是JavaScript 1.JavaScript概述 2.javaScript有什么作用 二.JavaScript快速入门 1.引入JavaScript 2.基 ...
- Javascript详解
Javascript详解 案例一:使用JS完成注册页面的校验 案例介绍 用户在提交表单是,需要对用户填写的数据进行校验.因为用户如果输入非法内容,则会导致服务器的压力过大,因此,一般提供前端校验和后 ...
- JavaScript详解一
问题?JavaScript详解 1.在 JavaScript 函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它.(该变量的作用域是局部的). 您可以在不同的函数中使用名称相同的局 ...
- python内置json模块的作用_python详解json模块
我们在做工作中经常会使用到json模块,今天就简单介绍下json模块 什么是json JSON ,全称为JavaScript Object Notation, 也就是JavaScript 对象标记,它 ...
- Day03 javascript详解
day03 js 详解 JavaScript的基础 JavaScript的变量 JavaScript的数据类型 JavaScript的语句 JavaScript的数组 JavaScript的函数 Ja ...
- urlencoded格式详解 JSON格式详解
一.表单格式详解 [urlencoded格式]:又叫form格式,或者是x-www-form-urlencoded格式. 口诀:表单格式是由键值对组成.键和值之间用=.多个键值对之间用&.例如 ...
- 详解JSON数据格式
JSON数据格式 JSON 的由来 JSON 的基本语法 解析与序列化 JSON 的由来 在目前的开发中,JSON是一种非常重要的数据格式,它并不是编程语言,而是一种可以在服务器和客户端之间传输的数据 ...
- python json方法详解_python详解json模块
我们在做工作中经常会使用到json模块,今天就简单介绍下json模块 什么是json JSON ,全称为JavaScript Object Notation, 也就是JavaScript 对象标记,它 ...
- 详解JSON.parse 和 JSON.stringify
文章目录 JSON.parse JSON.parse 语法 reviver 参数 JSON.parse 特性 解析的其他方法 JSON.stringify JSON.stringify 语法 repl ...
最新文章
- vim实用技巧-笔记(第九章)
- 题目11 数值的整数次方
- 论网络游戏如何结合社区设计
- Hadoop Hive 创建表及count/distinct操作(会被翻译成mr程序)
- scala创建并使用Enumerations
- qt 保存文件为utf8
- (45)System Verilog 类中变量随机激励约束语法
- boost boost::asio::read socket.read_some 区别
- php-fpm linux_Linux下PHP-fpm配置
- matlab qpsk调制程序,MATLAB QPSK调制及解调.doc
- rs485数据线接反_rs485接口怎么接线?弱电人必学RS485接口基础知识讲解
- A + B Problem Too
- 【读书向】阿里云天池大赛赛题解析——可视化
- 三个月来美国又有一万家餐馆因疫情倒闭或关闭;爱彼迎帮助在危机中的人寻找临时住宿 | 美通企业日报...
- 关于CLASS , SEL, IMP的说明
- 如何快速的熟悉对接新项目,并快速融入开发
- 驱动你做一件事的动力来源是什么?
- TP-LINK WR720N升级8M Flash 64M Ram,加USB-TTL,烧openwrt官方固件,接蓝牙适配器
- 转载:一篇文章看明白 Android 系统启动时都干了什么
- 用计算机设置变大的命令按钮 vb,2017年9月计算机二级考试VB考试题
热门文章
- 计算机无法上网修复工具,网络异常修复工具,连接后无法上网修复方式
- 怎样覆盖之前的html文档,jquery – html文本覆盖自己
- python程序设计小程序_请问有会用Python编程语言编几个小程序的吗?谢谢题目如下。...
- php strpbrk,PHP 字符串
- iOS UISlider
- android 自定义字体_Android自定义字体教程
- kotlin_Kotlin阵列
- java 8 谓词_Java谓词– Java 8谓词
- 网络人工智能研究方向有哪些?
- 常见的C++关键字有哪些?