JSON入门

来源:互联网 发布:易语言抄袭vb 编辑:程序博客网 时间:2024/06/15 16:26

JSON入门

基本介绍

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

——参考《百度百科》

PS:JSON工具网站:json.cn,sojson

JSON基本格式

JSON对象格式

{"key":"value","key":"value",....} 

键和值使用冒号分隔。

标准规范要求key必须使用双引号,value如果没有使用双引号表示变量。

// json对象var user = {    "username":"Switch",    "password":"123456"};// 输出:Switchalert(user.username); // 修改usernameuser.username = "Kity"; 

JSON数组

[ obj1 , obj2 , obj3 , ....]

表示一组值,多个值使用逗号分隔

// json数组var names = ['Switch','Kity','Tom'];// 输出:Kityalert(names[1]);

值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。

嵌套结构

案例1

// 综合案例var data = [    {"id":"b001","title":"json","price":"998"},          {"id":"b002","title":"java","price":"2510"},          {"id":"b003","title":"javascript","price":"888"},      ];// 输出:javaalert(data[1].title);// 输出:888alert(data[2].price)

案例2

var data = {    "programmers": [{        "firstName": "Brett",        "lastName": "McLaughlin",        "email": "aaaa"    }, {        "firstName": "Jason",        "lastName": "Hunter",        "email": "bbbb"    }, {        "firstName": "Elliotte",        "lastName": "Harold",        "email": "cccc"    }],    "authors": [{        "firstName": "Isaac",        "lastName": "Asimov",        "genre": "sciencefiction"    }, {        "firstName": "Tad",        "lastName": "Williams",        "genre": "fantasy"    }, {        "firstName": "Frank",        "lastName": "Peretti",        "genre": "christianfiction"    }],    "musicians": [{        "firstName": "Eric",        "lastName": "Clapton",        "instrument": "guitar"    }, {        "firstName": "Sergei",        "lastName": "Rachmaninoff",        "instrument": "piano"    }]};// 输出:Hunteralert(data.programmers[1].lastName);

JSON-Lib

json-lib是将java对象与json数据相互转换的工具。

下载地址:Json-Lib

常用对象

  • JSONObject, java对象(JavaBean、Map)与JSON数据转换工具类
  • JSONArray,java集合(List、Array) 与JSON数据转换工具类

常用方法

  • static fromObject(…),静态方法,用于将java对象或集合转换成jsonlib对象。
  • toString(),将jsonlib对象转换成 json字符串。

案例

// 对象或map————>JSONUser user = new User();user.setUid("u01");user.setUsername("switch");String jsonObject = JSONObject.fromObject(user).toString();// 输出结果:{"uid":"u01","username":"switch"}System.out.println(jsonObject);Map<String, String> maps = new LinkedHashMap<>();maps.put("username", "switch");maps.put("password", "123456");String jsonMap = JSONObject.fromObject(maps).toString();// 输出结果:{"username":"switch","password":"123456"}System.out.println(jsonMap);// 数组或List对象————>JSONString[] strings = {"switch", "kity"};String jsonArray = JSONArray.fromObject(strings).toString();// 输出结果:["switch","kity"]System.out.println(jsonArray);List<String> lists = new ArrayList<>();lists.add("switch");lists.add("kity");String jsonList = JSONArray.fromObject(lists).toString();// 输出结果:["switch","kity"]System.out.println(jsonList);// 综合案例User user1 = new User();user1.setUid("uid1");user1.setUsername("switch");User user2 = new User();user2.setUid("uid2");user2.setUsername("kity");List<User> users = new ArrayList<>();users.add(user1);users.add(user2);String jsonComplex = JSONArray.fromObject(users).toString();// 输出结果:[{"uid":"uid1","username":"switch"},{"uid":"uid2","username":"kity"}]System.out.println(jsonComplex);

AJax中使用JSON

register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html><html>    <head>        <meta charset="UTF-8">        <title>注册</title>        <script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-1.11.3.min.js"></script>        <script type="text/javascript">            function checkUser(obj) {                // post提交,并且接收格式为json                $.post("${pageContext.request.contextPath }/CheckUserNameIsExistServlet", {"username":obj.value}, function(data) {                    // 获取msg信息,并放入usename_msg对应标签中                    $("#usename_msg").html(data.msg);                    // 判断是否能够注册,能则提交按钮可用,不能则为disabled                    if(data.isOk == "true") {                        $("#sub").removeProp("disabled");                    } else {                        $("#sub").prop("disabled", "disabled");                    }                }, "json");            }        </script>    </head>    <body>        <form action="${pageContext.request.contextPath }/RegisterServlet" method="post">            <table width="60%" height="60%" align="center" bgcolor="#ffffff">                <tr>                    <td width="20%">用户名:</td>                    <td width="40%">                        <input type="text" name="username" id="username" onblur="checkUser(this)">                    </td>                    <td width="40%">                        <span id="usename_msg">                        </span>                    </td>                </tr>                <tr>                    <td>密码:</td>                    <td><input type="password" name="password" id="password"></td>                    <td></td>                </tr>                <tr>                    <td>Email:</td>                    <td><input type="text" name="email" id="email"></td>                    <td></td>                </tr>                <tr>                    <td>性别:</td>                    <td>                        <input type="radio" name="sex" value="男"><input type="radio" name="sex" value="女"></td>                    <td></td>                </tr>                <tr>                    <td>出生日期</td>                    <td><input type="date" name="birthday"></td>                    <td></td>                </tr>                <tr>                    <td colspan="3"><input type="submit" id="sub" value="注册"/></td>                </tr>            </table>        </form>    </body></html>

CheckUserNameIsExistServlet.java

package com.itheima.web.servlet;import java.io.IOException;import java.sql.SQLException;import java.util.LinkedHashMap;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.itheima.domain.User;import com.itheima.service.UserService;import net.sf.json.JSONObject;/** * 检测用户名是否存在Servlet *  * @author Switch * @data 2016年10月25日 * @version V1.0 */public class CheckUserNameIsExistServlet extends HttpServlet {    private static final long serialVersionUID = 7813407020472534606L;    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        response.setContentType("text/html;charset=utf-8");        request.setCharacterEncoding("utf-8");        // 获取用户名参数        String username = request.getParameter("username");        // 查询用户        try {            // 获取用户            User user = new UserService().getUserByUserName(username);            // System.out.println(user);            // 创建JSON所需的Map对象            Map<String, String> map = new LinkedHashMap<>();            // 用户名未注册            if (user == null) {                // 填写json信息                map.put("isOk", "true");                map.put("msg", "<font color='green'>该用户名可以使用</span>");            } else {                // 填写json信息                map.put("isOk", "false");                map.put("msg", "<font color='red'>该用户名已被占用</span>");            }            // 转换成json            String json = JSONObject.fromObject(map).toString();            // 响应            response.getWriter().write(json);        } catch (SQLException e) {            e.printStackTrace();        }    }    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        doGet(request, response);    }}

PS:Service层和Dao层很简单,不再给出。

0 0
原创粉丝点击