JSON数据 与 JSON数据的使用

1、JSON数据

JSON:JavaScript 对象表示法(JavaScript Object Notation)。根据这个定义,须要稍微了解JavaScript对象的格式javascript

var obj={
"name":"liming",
"age":12
}

JSON 是存储和交换文本信息的语法。相似 XML。
JSON 比 XML 更小、更快,更易解析。html

什么是 JSON ?java

  • JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
  • JSON 是轻量级的文本数据交换格式
  • JSON 独立于语言
  • JSON 具备自我描述性,更易理解

JSON 使用 JavaScript 语法来描述数据对象,可是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不一样的编程语言。jquery


JSON - 转换为 JavaScript 对象web

  • JSON 文本格式在语法上与建立 JavaScript 对象的代码相同。因为这种类似性,无需解析器,JavaScript 程序可以使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。

小程序:ajax

<p>
name:<span id="jname"></span><br/>
age:<span id="jage"></span><br/>
address:<span id="jaddress"></span><br>
<script type="text/javascript"> var JSONObject={ "name":"BIll gates", "address":"fifth avenue new york 666", "age":56 }; document.getElementById('jname').innerHTML=JSONObject.name document.getElementById('jaddress').innerHTML=JSONObject.address document.getElementById('jage').innerHTML=JSONObject.age </script>
</p>

JSON语法:编程

JSON 语法是 JavaScript 对象表示法语法的子集。json

  • 数据在名称/值对中:{“name”: “James”}
  • 数据由逗号分隔:{“name”: “James”,“age”,12}
  • 花括号保存对象{“name”: “James”,“age”,12}
  • 方括号保存数组:
    {
    “employees”: [
    { “firstName”:”John” , “lastName”:”Doe” },
    { “firstName”:”Anna” , “lastName”:”Smith” },
    { “firstName”:”Peter” , “lastName”:”Jones” }
    ]
    }

JSON 值
JSON 值能够是:小程序

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 逻辑值(true 或 false)
  • 数组(在方括号中)
  • 对象(在花括号中) null

JSON 使用 JavaScript 语法数组

var employees=[
    { "firstName":"John" , "lastName":"Doe" },
    { "firstName":"Anna" , "lastName":"Smith" },
    { "firstName":"Peter" , "lastName":"Jones" }
    ];

访问第1项
employees[0].firstName

JSON 文件

JSON 文件的文件类型是 ".json"
JSON 文本的 MIME 类型是 "application/json"

把 JSON 文本转换为 JavaScript 对象

JSON 最多见的用法之一,是从 web 服务器上读取 JSON 数据(做为文件或做为 HttpRequest),将 JSON 数据转换为 JavaScript 对象,而后在网页中使用该数据。

<p>
name:<span id="jname"></span><br/>
age:<span id="jage"></span><br/>
address:<span id="jaddress"></span><br>
<script type="text/javascript"> var txt='{"name":"BIll gates","address":"new york","age":"56"}'; txt=eval("("+txt+")"); document.getElementById('jname').innerHTML=txt.name document.getElementById('jaddress').innerHTML=txt.address document.getElementById('jage').innerHTML=txt.age </script>
</p>

上面将文本格式转换成了JSON对象。
因为 JSON 语法是 JavaScript 语法的子集,JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。
eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,而后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误

2、JSON简单应用

在与后台交互的时候,若是后台传回的数据不是JSON格式的数据,或者数据格式有问题,那么前台将没法得到正确的数据。
前台(这里是JSP页面):

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
<script src="js/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript"> function getJson(){ alert("call getjson"); $.getJSON("GetJsonServlet",function(data){ $.each(data,function(i,value){ alert(value); }); }); } function jsonGet(){ $.ajax({ dataType:"json", url:"GetJsonServlet", success:function(data){ alert("succeed"); } }); } </script>
<p>
name:<span id="jname"></span><br/>
age:<span id="jage"></span><br/>
address:<span id="jaddress"></span><br>
<script type="text/javascript"> var JSONObject={ "name":"BIll gates", "address":"fifth avenue new york 666", "age":56 }; var txt='{"name":"BIll gates","address":"new york","age":"56"}'; txt=eval("("+txt+")"); document.getElementById('jname').innerHTML=txt.name document.getElementById('jaddress').innerHTML=txt.address document.getElementById('jage').innerHTML=txt.age </script>
</p>
<a href="javascript:getJson();">getJson</a>
<a href="javascript:jsonGet();">getJson</a>
</body>
</html>
jQuery.getJSON( url [, data ] [, success ] )
    url
        Type: String
        A string containing the URL to which the request is sent.
    data
        Type: PlainObject or String
        A plain object or string that is sent to the server with the request.
    success
        Type: Function( PlainObject data, String textStatus, jqXHR jqXHR )
        A callback function that is executed if the request succeeds.


----------


$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: success
});

上面两个方法是比较经常使用的前台异步传输
后台(servlet):

import java.awt.List; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONArray; import net.sf.json.JSONObject; @WebServlet("/GetNameServlet") public class GetJsonServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * Default constructor. */ public GetJsonServlet() { // TODO Auto-generated constructor stub } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType( "application/json"); System.out.println("123"); Map<String,String>map=new HashMap<>(); map.put("name", "liming"); map.put("age", "12"); ArrayList<String> listString=new ArrayList<>(); listString.add("name"); listString.add("age"); JSONArray jsonObj=new JSONArray(); jsonObj.addAll(listString); PrintWriter out =response.getWriter(); System.out.println(jsonObj); out.println(jsonObj);//"{\"age\":12,\"name\":14}"或者"[12,23,34,45]" //这里是将数据转化成JSON格式,不然前台获取数据会出问题 out.flush(); out.close(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }