手机端小强原创文章,java小强个人博客站点
当前位置: 首页 >> JS >> JSON简介与JS解析JSON

JSON简介与JS解析JSON

32160 JS | 2014-6-18

首先什么是JSON:
JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
JSON 是轻量级的文本数据交换格式
JSON 独立于语言
JSON 具有自我描述性,更易理解
JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言
如何解析:
JavaScript程序能够使用内建的 eval() 函数用 JSON 数据来生成原生的 JavaScript。主流浏览器都是支持该函数的。
类似 XML:
JSON 是纯文本
JSON 具有“自我描述性”(人类可读)
JSON 具有层级结构(值中存在值)
JSON 可通过 JavaScript 进行解析
JSON 数据可使用 AJAX 进行传输
相比 XML 的不同之处:
没有结束标签
更短
读写的速度更快
能够使用内建的 JavaScript eval() 方法进行解析
使用数组
不使用保留字
JSON 语法规则:
数据在名称/值对中
数据由逗号分隔
花括号保存对象
方括号保存数组
JSON 值可以是:
数字(整数或浮点数)
字符串(在双引号中)
逻辑值(true 或 false)
数组(在方括号中)
对象(在花括号中)
null
JSON 文件:
JSON 文件的文件类型是 ".json"
JSON 文本的 MIME 类型是 "application/json"

 

对于 eval() 函数,他是JS中的一个方法,可计算某个字符串,并执行其中的的 JavaScript 代码。
该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval() 函数传递 String 对象来作为参数。
如果试图覆盖 eval 属性或把 eval() 方法赋予另一个属性,并通过该属性调用它,则 ECMAScript 实现允许抛出一个 EvalError 异常。
可以做几个例子来说明一下他的使用:

<script type="text/javascript">
eval("x=10;y=20;document.write(x*y)")
document.write(eval("2+2"))
var x=10
document.write(eval(x+17))
</script>

 

会输出以下内容:

200
4
27

 

这就像你给了一条SQL语句然后执行返回结果一样。
对于参数的合法检测,可以使用以下代码:

try  {
     alert("Result:" + eval(prompt("Enter an expression:","")));
}catch(exception) {
     alert(exception);
}

 

一般来说,对于JSON的应用,都是前台使用AJAX请求,后台要返回的对象集合使用JSON来表达传递到前台。
我们来做一个Servlet,他返回一个JSON字符串给前台:

package com;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
@SuppressWarnings("serial")
public class ServiceAjax extends HttpServlet {
 public ServiceAjax() {
  super();
 }
 public void destroy() {
  super.destroy();
 }
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {  
  request.setCharacterEncoding("UTF-8");
  response.setCharacterEncoding("UTF-8");
  PrintWriter out = response.getWriter();
  out.write("[{id:1,name:'cui'},{id:2,name:'su'},{id:3,name:'qiang'}]");
  out.flush();
  out.close();
 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doGet(request, response);
 }
 public void init() throws ServletException {
 }
}

 

前台接收到返回的字符后使用eval()进行解析,然后弹出其内容:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">    
    <title>XMLHttpRequest对象学习</title>
    <script type="text/javascript" language="javascript">
 function loadXMLDoc(){
  var xmlhttp;
  if (window.XMLHttpRequest) {
   xmlhttp=new XMLHttpRequest();
  }else {
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function() {
   if (xmlhttp.readyState==4 && xmlhttp.status==200) {
    var objs = eval(xmlhttp.responseText);
    for(i=0;i<objs.length;i++){
     var user = objs[i];
     alert(user.id + "-->" + user.name);
    }
   }
  }
  var url = "<%=basePath %>ServiceAjax";
  xmlhttp.open("POST",url,true);
  xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8");
  // 增加time随机参数,防止读取缓存
  xmlhttp.send("time=" +  + Math.random());
 }
    </script>
  </head>  
  <body>
    <div id="myDiv"></div>
    <input type="button" name="bxml" value="Read" onclick="loadXMLDoc()" />
  </body>
</html>

 

如果你对于JS解析XML和关于JS的AJAX有任何疑惑,你可以参考我博客的其他文章。


推荐您阅读更多有关于“ json JavaScript eval 解析 ”的文章

上一篇:JavaScript中XMLHttpRequest对象初步使用 下一篇:JS绘图Flot应用-简单曲线图

猜你喜欢

发表评论:

个人资料
blogger

java小强
没有思考,人生的路会越走越难!

搜索
分类
最新微语
  • 8月1日,我已离开奋斗多年的北京。不知道是暂时的离开,还是永久的离别,反正已经离职在家,告别每日上班,每天苦累的煎熬,过一段属于自己的生活。以前是专职工作,现在专职生活。

    2017-08-18 12:47

  • 又弄完一个项目,累成狗,但是感觉又进步不少,除了很多坑已经踩过,做起来也是轻车熟路。同时也认识到,程序不在于你多牛逼,而是在乎你的细节把控度,而细节的关注,是一个优秀程序员必须要注意的。另外,要相信自己,勇敢向前,没人生下来就是成功的,而且,成功的路,比成功本身更重要。

    2017-06-30 09:46

  • 今日北京再次沙尘暴来袭,吃了几年细粮,终于能来口粗粮了,不过大早上看见这场景,还是吓我一跳,不过随后就平静了,毕竟是老朋友了。进公司又发现一股烤糊的味道,真是祸不单行啊,例外都是污染。发了两个口罩,开启保护模式。

    2017-05-04 10:16

  • 今天同学问我,最近还在写代码吗?我想了想,这个问题怎么回答呢,我好像确实很长时间,虽然写了一些,但是主要内容已经不是写代码了。然后再想想,自己也7年多了,这么多年了,我收获了什么,我的目标到底是什么。眼看就奔三了,人生啊,开启感叹模式。

    2017-03-30 22:52

  • 也许大家都已经注意到了,今年的房价,好多地方都是翻了一番,跟着就是,各地房东开始变相涨租。今年之所以搬走,就是为此,这两天同学也是如此。很多房东只认钱,别谈感情,伤钱。而对于这个城市来说,你怎么定位自己,你真把自己当成她的一份子?你来此为何?将来何去何从?自己掂量清楚。

    2016-12-05 10:03

  • 更多»

最新文章
热门文章
随机文章