目录结构:

contents structure [+]

什么是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

本文为博主原创文章,如需转载请注明出处。

【JavaScript】详解JSON的更多相关文章

  1. Day03 javascript详解

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

  2. python详解json模块

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

  3. Unicode与JavaScript详解

    本文为转载内容 一.Unicode是什么? Unicode源于一个很简单的想法:将全世界所有的字符包含在一个集合里,计算机只要支持这一个字符集,就能显示所有的字符,再也不会有乱码了. 它从0开始,为每 ...

  4. javascript 详解数组

      概念 数组创建 数组读写 数组 VS. 一般对象 相同点 不同点 稀疏数组 数组的length属性 元素增删 数组迭代 二维数组 数组方法 Array.prototype.join Array.p ...

  5. 【原创教程】JavaScript详解之语法和对象

    JavaScript的好的想法:函数.弱类型.动态对象和一个富有表现力的对象字面量表示法. JavaScript的坏的想法:基于全局变量的编程模型.   好了,不管他是好的还是坏的,都是我的最爱,下面 ...

  6. JavaScript详解

    JavaScript可以说是web开发中必备的一种技术.它具有灵活,简单,高效等特点.这次DRP中大量的用到了js,让自己对js有了更深的了解.看完这个以后还回去看了一下牛腩的js视频.把以前没看的看 ...

  7. Unicode与JavaScript详解 [很好的文章转]

    上个月,我做了一次分享,详细介绍了Unicode字符集,以及JavaScript语言对它的支持.下面就是这次分享的讲稿. 一.Unicode是什么? Unicode源于一个很简单的想法:将全世界所有的 ...

  8. Web前端之Javascript详解20180330

    一.javascript概述 javascript是基于对象和事件的脚本语言. 特点: 1.安全性(不允许直接访问本地硬盘(因为是被远程的浏览器解释)),它可以做的就是信息的动态交互 2.跨平台性(只 ...

  9. JavaScript: 详解正则表达式之三

    在上两篇文章中博主介绍了JavaScript中的正则常用方法和正则修饰符,今天准备聊一聊元字符和高级匹配的相关内容. 首先说说元字符,想必大家也都比较熟悉了,JS中的元字符有以下几种: / \ | . ...

随机推荐

  1. jQuery源码分析系列:Callback深入

    关于Callbacks http://www.cnblogs.com/aaronjs/p/3342344.html $.Callbacks()的内部提供了jQuery的$.ajax() 和 $.Def ...

  2. Spring(二)scope、集合注入、自动装配、生命周期

    原文链接:http://www.orlion.ga/189/ 一.scope bean的scope属性中常用的有两种:singleton(单例,默认)和prototype(原型,每次创建新对象) 例: ...

  3. Python下使用help(dict),显示'more'不是内部或外部命令,也不是可运行的程序或批处理文件,该如何处理?

    1.首先需要用管理员身份运行cmd. 2.然后检查环境变量中path中是否添加C:\Windows\System32这个路径.

  4. EntityFramework之异步、事务及性能优化(九)

    前言 本文开始前我将循序渐进先了解下实现EF中的异步,并将重点主要是放在EF中的事务以及性能优化上,希望通过此文能够帮助到你. 异步 既然是异步我们就得知道我们知道在什么情况下需要使用异步编程,当等待 ...

  5. 由position属性引申的关于css的进阶讨论(包含块、BFC、margin collapse)

    写这篇文章的起因是源于这篇文章:谈谈面试与面试题 中关于position的讨论,文中一开始就说的这句话: 面试的时候问个css的position属性能刷掉一半的人这是啥情况…… 其实这问题我本来打算的 ...

  6. ES6 - Note2:解构赋值

    ES6的解构赋值就是利用模式匹配从按照一定模式的数组或者对象中提取值赋值给变量. 1.数组的解构赋值 在ES6以前,变量的赋值是直接指定的,以后可以这么来写,如下所示 let [a,b,c] = [1 ...

  7. Windows 搭建 .NET 跨平台环境并运行应用程序

    写在前面 阅读目录: Install .NET Version Manager (DNVM) Install .NET Core Execution Environment (DNX) Write t ...

  8. angular使用总结

    一.是否有必要加入模块化框架 1.Reqruiejs seajs的主要作用 (1)模块化,让代码易于维护. angular本身就是mvc,模块化很清晰,所以这点用不到requirejs (2)可以按需 ...

  9. Node.js、express、mongodb 实现分页查询、条件搜索

    前言 在上一篇Node.js.express.mongodb 入门(基于easyui datagrid增删改查) 的基础上实现了分页查询.带条件搜索. 实现效果 1.列表第一页. 2.列表第二页 3. ...

  10. Android Conflict with nineoldandroids等报错

    问题 报错:Conflict with nineoldandroids 原因 我在引入Fresco时由于其中也包含nineoldandroids这个库,导致库的冲突,相关的库冲突都是因为这个问题导致的 ...