目录结构:

contents structure [+]
  1. 什么是JSON
  2. JSON和XML的比较
    1. 相同点
    2. 不同点
  3. JSON语法
  4. 如何解析JSON文本
    1. eval()方法
    2. JSON.parse()方法
    3. JSON数组
  5. JSON文件
  6. JSONP
    1. 1.什么是JSONP
    2. 2.JSONP有什么作用
    3. 3.为什么使用JSONP
    4. 4.使用jsp实现JSONP
      1. 1.客户端完整代码
      2. 2.服务端完整代码
      3. 3.代码讲解
  7. java对于JSON的解析
  8. 参考文章

什么是JSON

JSON就是JavaScript Object Notation,即JavaScript对象表示法。

JSON和XML的比较

相同点:

都是存储和交换文本信息的一种方法。

不同点:

JSON 比 XML 更小、更快,更易解析。XML在JSON出现之前,风靡一时,XML有两大主要功能,就是存储数据和传输数据,不过随着时间推移,XML在传输数据方面就显得力不从心了,因此后来诞生的JSON在传输数据方面取代了XML。所以JSON主要用于传输数据,XML主要用于存储数据。关于在ajax中传输JSON可以参考文章浅析Ajax的使用。

JSON的语法

  1. 数据在“名称:值”对中
  2. 数据由逗号隔开
  3. 花括号保存对象
  4. 方括号保存数组

常见的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相关推荐

  1. 【JavaScript详解】一文掌握JavaScript基础知识(上)

    JavaScript基础 前言 一.什么是JavaScript 1.JavaScript概述 2.javaScript有什么作用 二.JavaScript快速入门 1.引入JavaScript 2.基 ...

  2. Javascript详解

     Javascript详解 案例一:使用JS完成注册页面的校验 案例介绍 用户在提交表单是,需要对用户填写的数据进行校验.因为用户如果输入非法内容,则会导致服务器的压力过大,因此,一般提供前端校验和后 ...

  3. JavaScript详解一

    问题?JavaScript详解 1.在 JavaScript 函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它.(该变量的作用域是局部的). 您可以在不同的函数中使用名称相同的局 ...

  4. python内置json模块的作用_python详解json模块

    我们在做工作中经常会使用到json模块,今天就简单介绍下json模块 什么是json JSON ,全称为JavaScript Object Notation, 也就是JavaScript 对象标记,它 ...

  5. Day03 javascript详解

    day03 js 详解 JavaScript的基础 JavaScript的变量 JavaScript的数据类型 JavaScript的语句 JavaScript的数组 JavaScript的函数 Ja ...

  6. urlencoded格式详解 JSON格式详解

    一.表单格式详解 [urlencoded格式]:又叫form格式,或者是x-www-form-urlencoded格式. 口诀:表单格式是由键值对组成.键和值之间用=.多个键值对之间用&.例如 ...

  7. 详解JSON数据格式

    JSON数据格式 JSON 的由来 JSON 的基本语法 解析与序列化 JSON 的由来 在目前的开发中,JSON是一种非常重要的数据格式,它并不是编程语言,而是一种可以在服务器和客户端之间传输的数据 ...

  8. python json方法详解_python详解json模块

    我们在做工作中经常会使用到json模块,今天就简单介绍下json模块 什么是json JSON ,全称为JavaScript Object Notation, 也就是JavaScript 对象标记,它 ...

  9. 详解JSON.parse 和 JSON.stringify

    文章目录 JSON.parse JSON.parse 语法 reviver 参数 JSON.parse 特性 解析的其他方法 JSON.stringify JSON.stringify 语法 repl ...

最新文章

  1. vim实用技巧-笔记(第九章)
  2. 题目11 数值的整数次方
  3. 论网络游戏如何结合社区设计
  4. Hadoop Hive 创建表及count/distinct操作(会被翻译成mr程序)
  5. scala创建并使用Enumerations
  6. qt 保存文件为utf8
  7. (45)System Verilog 类中变量随机激励约束语法
  8. boost boost::asio::read socket.read_some 区别
  9. php-fpm linux_Linux下PHP-fpm配置
  10. matlab qpsk调制程序,MATLAB QPSK调制及解调.doc
  11. rs485数据线接反_rs485接口怎么接线?弱电人必学RS485接口基础知识讲解
  12. A + B Problem Too
  13. 【读书向】阿里云天池大赛赛题解析——可视化
  14. 三个月来美国又有一万家餐馆因疫情倒闭或关闭;爱彼迎帮助在危机中的人寻找临时住宿 | 美通企业日报...
  15. 关于CLASS , SEL, IMP的说明
  16. 如何快速的熟悉对接新项目,并快速融入开发
  17. 驱动你做一件事的动力来源是什么?
  18. TP-LINK WR720N升级8M Flash 64M Ram,加USB-TTL,烧openwrt官方固件,接蓝牙适配器
  19. 转载:一篇文章看明白 Android 系统启动时都干了什么
  20. 用计算机设置变大的命令按钮 vb,2017年9月计算机二级考试VB考试题

热门文章

  1. 计算机无法上网修复工具,网络异常修复工具,连接后无法上网修复方式
  2. 怎样覆盖之前的html文档,jquery – html文本覆盖自己
  3. python程序设计小程序_请问有会用Python编程语言编几个小程序的吗?谢谢题目如下。...
  4. php strpbrk,PHP 字符串
  5. iOS UISlider
  6. android 自定义字体_Android自定义字体教程
  7. kotlin_Kotlin阵列
  8. java 8 谓词_Java谓词– Java 8谓词
  9. 网络人工智能研究方向有哪些?
  10. 常见的C++关键字有哪些?