json教程从入门到使用
来源:互联网 发布:日本动画公司排行知乎 编辑:程序博客网 时间:2024/06/18 08:12
json教程从入门到使用
一:入门
简介:
JSON(JavaScriptObject Notation)、轻量级数据交换格式、非常适合于服务器与 JavaScript 的交互。
JSON两种格式:
1、对象
对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
2、数组
数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
(具体格式可参照www.json.org、这里只做简略介绍、下方会贴出具体相关)
javascript中的JSON相关:
一:对象型JSON
二:数组型JSON
- $(document).ready(function showStudent(){
- varstudent =
- [
- {"sno":"001","name":"jack","age":130},
- {"sno":"002","name":"tame","age":120},
- {"sno":"003","name":"cule","age":110},
- ];
- //以下是两种获取值的方法
- document.write('sno:' + student[0].sno + ' name:' +student[0].name +' age :' +student[0].age +'<br/>');
- document.write('sno:' + student[0]["sno"] + ' name:' + student[0]["name"] +' age :' + student[0]["age"]+'<br/>' );
- document.write('sno:' + student[1]["sno"] + ' name:' + student[1]["name"] +' age :' + student[1]["age"]+'<br/>' );
- document.write('sno:' + student[1]["sno"] + ' name:' + student[1]["name"] +' age :' + student[1]["age"]+'<br/>' );
- document.write('sno:' + student[2]["sno"] + ' name:' + student[2]["name"] +' age :' + student[2]["age"]+'<br/>' );
- document.write('sno:' + student[2]["sno"] + ' name:' + student[2]["name"] +' age :' + student[2]["age"]+'<br/>' );
- });
三:相互嵌套(仅举一种、可自己弄着玩试试)
- $(document).ready(function showStudent(){
- varstudent =
- {
- "sno":"001",
- "name":"jack",
- "age":130,
- "address":
- [
- {"pro":"anhui","city":"fuyang"},
- {"pro":"jiangsu","city":"nanjing"}
- ]
- }
- document.write('sno:' + student.sno + ' name:' + student.name +' age :' + student.age +' pro :' + student.address[0].pro +' city :' + student.address[0].city+'<br/>' );
- });
补充:至于JSON为什么能这样取得数据的值? It is based on a subset of the JavaScript Programming Language, StandardECMA-262 3rd Edition - December 1999. 它是javascript的一个子集、javascript会对其进行解析(如何实现暂不理会)。
四:json格式的字符串、和json对象(对于什么时候称作json对象不做深究)的区别:
很简单:json格式的字符串、很明显就是一个字符串、只具有字符串的特性和功能。只是格式上看起来像json对象而已、而不具有json对象所具有的功能(比如上面的例子中拿到student对象的某个属性的值、上面是String的话、student.sno能获得sno的值吗?某老师的话:自己动手试试……)。
- $(document).ready(function showStudent(){
- var student =
- {
- "sno":"001",
- "name":"jack",
- "age":130,
- "address":
- [
- {"pro":"anhui","city":"fuyang"},
- {"pro":"jiangsu","city":"nanjing"}
- ]
- }
- document.write('sno :' + student.sno + ' name:' + student.name +' age :' + student.age +' pro :' + student.address[0].pro +' city :' + student.address[0].city +'<br/>' );
- });
注意:别把
- typeof(studentJson)+'<br/>
'写成
- typeof(studentJson +'<br/>')
这样就成了JSON对象与String拼接了、结果会变成两个string…
JSON格式Str与JSON对象之间的转换
一:Object转换成JSONStr
- <span style="white-space:pre"> </span>$(document).ready(function Object2JSONString(){
- var student = new Student("001","chy");
- var studentJson = student.toJSONString();
- document.write(typeof(studentJson) + '<br/>');
- document.write(studentJson + '<br/>');
- });
- //toJOSNString() 可以把json格式的字符串或者Object转换成json对象
- function Student(sno, name){
- this.sno = sno;
- this.name = name;
- }
二:JSONStr转换成JSON对象
- <span style="white-space:pre"> </span>$(document).ready(function str2json () {
- var studentStr = '{"sno":"001","name":"jack","age":123}';
- //不推荐、存在安全隐患
- var studentJson = eval('('+studentStr+')');
- //缺陷:不能适用于所有的浏览器
- var studentJson2 = JSON.parse(studentStr);
- //需下载jquery.json-2.4.js、未实现
- //var studentJson3 = jQuery.toJSON(studentStr);
- //document.write(typeof(studentJson3)+'<br/>' );
- document.write(typeof(studentStr) +'<br/>' );
- document.write(typeof(studentJson)+'<br/>' );
- document.write(typeof(studentJson2)+'<br/>' );
- })
三:JSON对象转换成JSONStr
- <span style="white-space:pre"> </span>$(document).ready(function json2str () {
- var studentJson = {"sno":"001","name":"jack","age":123};
- //toJSONString()方法需要借助json.js文件(可去官方网站下载)
- var studentStr = studentJson.toJSONString();
- var studentStr2 = JSON.stringify(studentJson);
- document.write(studentStr +'<br/>' );
- document.write(studentStr2 +'<br/>' );
- document.write(typeof(studentStr) +'<br/>' );
- document.write(typeof(studentJson)+'<br/>' );
- })
JSON遍历
四种遍历方式:- <!DOCTYPE HTML>
- <html>
- <script src="jquery.min.js"></script>
- <script type="text/javascript">
- function firstMethod(){
- var list1 = [1,3,4];
- document.write(list1[1]+'<br/>');
- var list2 = [{"name":"leamiko","xing":"lin"}];
- document.write(list2[0]["xing"]+'<br/>');
- document.write(list2[0].xing+'<br/>');
- document.write("==========================================================="+'<br/>');
- }
- function secondMethod(){
- var value =
- {
- "china":
- {
- "hangzhou":{"item":"1"},
- "shanghai":{"item":"2"},
- "chengdu":{"item":"3"}
- },
- "America":
- {
- "aa":{"item":"1"},
- "bb":{"item":"2"}
- },
- "Spain":
- {
- "dd":{"item":"1"},
- "ee":{"item":"2"},
- "ff":{"item":"3"}
- }
- };
- //向里循环的时候只能用external[internal][deeperinternal]...而不能用external.internal.deeperinternal...原因不知道。。。当json类型是{...}时for(var x in value)x指的是每一个值、当json类型是[]时 x指的是数组下标。根据情况利用
- for(var country in value){
- document.write(country +':<br/>');
- for(var city in value[country]){
- document.write(' '+city+':</br>');
- for(var item in value[country][city]){
- document.write(' '+value[country][city][item]+':</br>');
- }
- }
- }
- document.write("==========================================================="+'<br/>');
- }
- function thirdMethod(){
- var value = {
- "china":
- [
- {"name":"hangzhou", "item":"1"},
- {"name":"shanghai", "item":"2"},
- {"name":"sichuan", "item":"3"}
- ],
- "America":
- [
- {"name":"aa", "item":"12"},
- {"name":"bb", "item":"2"}
- ],
- "Spain":
- [
- {"name":"cc", "item":"1"},
- {"name":"dd", "item":"23"},
- {"name":"ee", "item":"3"}
- ]
- };
- for(var country in value){
- document.write(country+'<br/>');
- for(var x in value[country]){
- document.write('cityname: ' + value[country][x]["name"] + ' item: ' + value[country][x]["item"] + '<br/>');
- }
- }
- document.write("==========================================================="+'<br/>');
- }
- function fourthMethod(){
- var value = {
- "china":
- [
- {"name":"hangzhou", "item":"1"},
- {"name":"shanghai", "item":"2"},
- {"name":"sichuan", "item":"3"}
- ],
- "America":
- [
- {"name":"aa", "item":"12"},
- {"name":"bb", "item":"2"}
- ],
- "Spain":
- [
- {"name":"cc", "item":"1"},
- {"name":"dd", "item":"23"},
- {"name":"ee", "item":"3"}
- ]
- };
- for(var country in value){
- document.write(country+'<br/>');
- for(var i=0; i<value[country].length; i++){
- document.write('cityname: ' + value[country][i]["name"] + ' item: ' + value[country][i]["item"] + '<br/>');
- }
- }
- document.write("==========================================================="+'<br/>');
- }
- $(document).ready=firstMethod();
- $(document).ready=secondMethod();
- $(document).ready=thirdMethod();
- $(document).ready=fourthMethod();
- </script>
- <body>
- </body>
- </html>
JSON在struts2中的使用
说白了、json在java web项目中的应用本质就是客户端请求到服务端、服务端将数据处理成json格式返回给客户端、客户端再根据返回的数据进行下一步操作。。。采用json就
是因为json更容易和快速的被解析、我们又可以根据自己的需要在后台设定好数据格式、这样在前台可以直接拿来用或者加工一下。。。。
(最好是下个能直接用的项目、然后自己动手多试、自己搭、如果jar包冲突、搞了半天没解决、什么激情也没有了、还什么都没有干、、、)
只搞一种、有时间补充:
1、jar包
commons-beanutils-1.7.0.jar
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
commons-lang-2.3.jar
commons-logging-1.0.4.jar
ezmorph-1.0.3.jar
freemarker-2.3.15.jar
json-lib-2.1.jar
ognl-2.7.3.jar
struts2-core-2.1.8.1.jar
struts2-json-plugin-2.1.8.1.jar
xwork-core-2.1.6.jar
2、struts.xml
- <package name="default" namespace="/" extends="json-default">
- <action name="jsontest" class="struts2jsonjquery.test.action.JsonJqueryStruts2Action">
- <!-- 返回单个值的result -->
- <result name="message" type="json"></result>
- <!-- 返回UserInfo对象的 -->
- <result name="userInfo" type="json"></result>
- <!-- 返回List对象的 -->
- <result name="list" type="json"></result>
- <!-- 返回Map对象的 -->
- <result name="map" type="json"></result>
- </action>
- </package>
3、jsp
- <%@ page language="java" pageEncoding="GBK"%>
- <%
- String path = request.getContextPath();
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <title>Struts2+JQuery+JSON</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <script type="text/javascript" src="<%=path %>/js/jquery.js"></script>
- <script type="text/javascript" src="<%=path %>/js/jsonstyle.js"></script>
- </head>
- <body>
- <input id="getMessage" type="button" value="获取单个值"/>
- <input id="getUserInfo" type="button" value="获取UserInfo对象"/>
- <input id="getList" type="button" value="获取List对象"/>
- <input id="getMap" type="button" value="获取Map对象"/>
- <br>
- <br>
- <br>
- <!-- 要显示信息的层 -->
- <div id="message"></div>
- <form>
- 用户ID:<input name="userInfo.userId" type="text"/><br/>
- 用户名:<input name="userInfo.userName" type="text"/><br/>
- 密 码:<input name="userInfo.password" type="text"/><br>
- <input id="regRe" type="button" value="注册"/>
- </form>
- </body>
- </html>
- //初始加载页面时
- $(document).ready(function(){
- //为获取单个值的按钮注册鼠标单击事件
- $("#getMessage").click(function(){
- $.getJSON("jsontest!returnMessage.action",function(data){
- //通过.操作符可以从data.message中获得Action中message的值
- $("#message").html("<font color='red'>"+data.message+"</font>");
- });
- });
- //为获取UserInfo对象按钮添加鼠标单击事件
- $("#getUserInfo").click(function(){
- $.getJSON("jsontest!returnUserInfo.action",function(data){
- //清空显示层中的数据
- $("#message").html("");
- //为显示层添加获取到的数据
- //获取对象的数据用data.userInfo.属性
- $("#message").append("<div><font color='red'>用户ID:"+data.userInfo.userId+"</font></div>")
- .append("<div><font color='red'>用户名:"+data.userInfo.userName+"</font></div>")
- .append("<div><font color='red'>密码:"+data.userInfo.password+"</font></div>")
- });
- });
- //为获取List对象按钮添加鼠标单击事件
- $("#getList").click(function(){
- $.getJSON("jsontest!returnList.action",function(data){
- //清空显示层中的数据
- $("#message").html("");
- //使用jQuery中的each(data,function(){});函数
- //从data.userInfosList获取UserInfo对象放入value之中
- $.each(data.userInfosList,function(i,value){
- $("#message").append("<div>第"+(i+1)+"个用户:</div>")
- .append("<div><font color='red'>用户ID:"+value.userId+"</font></div>")
- .append("<div><font color='red'>用户名:"+value.userName+"</font></div>")
- .append("<div><font color='red'>密码:"+value.password+"</font></div>");
- });
- });
- });
- //为获取Map对象按钮添加鼠标单击事件
- $("#getMap").click(function(){
- $.getJSON("jsontest!returnMap.action",function(data){
- //清空显示层中的数据
- $("#message").html("");
- //使用jQuery中的each(data,function(){});函数
- //从data.userInfosList获取UserInfo对象放入value之中
- //key值为Map的键值
- $.each(data.userInfosMap,function(key,value){
- $("#message").append("<div><font color='red'>用户ID:"+value.userId+"</font></div>")
- .append("<div><font color='red'>用户名:"+value.userName+"</font></div>")
- .append("<div><font color='red'>密码:"+value.password+"</font></div>");
- });
- });
- });
- //向服务器发送表达数据
- $("#regRe").click(function(){
- //把表单的数据进行序列化
- var params = $("form").serialize();
- //使用jQuery中的$.ajax({});Ajax方法
- $.ajax({
- url:"jsontest!gainUserInfo.action",
- type:"POST",
- data:params,
- dataType:"json",
- success:function(data){
- //清空显示层中的数据
- $("#message").html("");
- //为显示层添加获取到的数据
- //获取对象的数据用data.userInfo.属性
- $("#message").append("<div><font color='red'>用户ID:"+data.userInfo.userId+"</font></div>")
- .append("<div><font color='red'>用户名:"+data.userInfo.userName+"</font></div>")
- .append("<div><font color='red'>密码:"+data.userInfo.password+"</font></div>")
- }
- });
- });
- });
4、action
- package struts2jsonjquery.test.action;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import struts2jsonjquery.test.entity.UserInfo;
- import com.opensymphony.xwork2.ActionSupport;
- public class JsonJqueryStruts2Action extends ActionSupport {
- private static final long serialVersionUID = 3518833679938898354L;
- private String message; //使用json返回单个值
- private UserInfo userInfo; //使用json返回对象
- private List<UserInfo> userInfosList; //使用josn返回List对象
- private Map<String,UserInfo> userInfosMap; //使用json返回Map对象
- //为上面的的属性提供get,Set方法
- public String getMessage() {
- return message;
- }
- public void setMessage(String message) {
- this.message = message;
- }
- public UserInfo getUserInfo() {
- return userInfo;
- }
- public void setUserInfo(UserInfo userInfo) {
- this.userInfo = userInfo;
- }
- public List<UserInfo> getUserInfosList() {
- return userInfosList;
- }
- public void setUserInfosList(List<UserInfo> userInfosList) {
- this.userInfosList = userInfosList;
- }
- public Map<String, UserInfo> getUserInfosMap() {
- return userInfosMap;
- }
- public void setUserInfosMap(Map<String, UserInfo> userInfosMap) {
- this.userInfosMap = userInfosMap;
- }
- /**
- * <p>
- * 返回单个值
- * <p>
- * @return
- */
- public String returnMessage(){
- this.message = "成功返回单个值";
- return "message";
- }
- /**
- * <p>
- * 返回UserInfo对象
- * </p>
- * @return
- */
- public String returnUserInfo(){
- userInfo = new UserInfo();
- userInfo.setUserId(10000);
- userInfo.setUserName("张三");
- userInfo.setPassword("000000");
- return "userInfo";
- }
- /**
- * <p>
- * 返回List对象
- * </p>
- * @return
- */
- public String returnList(){
- userInfosList = new ArrayList<UserInfo>();
- UserInfo u1 = new UserInfo();
- u1.setUserId(10000);
- u1.setUserName("张三");
- u1.setPassword("000000");
- UserInfo u2 = new UserInfo();
- u2.setUserId(10001);
- u2.setUserName("李四");
- u2.setPassword("111111");
- UserInfo u3 = new UserInfo();
- u3.setUserId(10002);
- u3.setUserName("王五");
- u3.setPassword("222222");
- UserInfo u4 = new UserInfo();
- u4.setUserId(10003);
- u4.setUserName("赵六");
- u4.setPassword("333333");
- userInfosList.add(u1);
- userInfosList.add(u2);
- userInfosList.add(u3);
- userInfosList.add(u4);
- return "list";
- }
- /**
- * <p>
- * 返回Map对象
- * </p>
- * @return
- */
- public String returnMap(){
- userInfosMap = new HashMap<String,UserInfo>();
- UserInfo u1 = new UserInfo();
- u1.setUserId(10000);
- u1.setUserName("张三");
- u1.setPassword("000000");
- UserInfo u2 = new UserInfo();
- u2.setUserId(10001);
- u2.setUserName("李四");
- u2.setPassword("111111");
- UserInfo u3 = new UserInfo();
- u3.setUserId(10002);
- u3.setUserName("王五");
- u3.setPassword("222222");
- UserInfo u4 = new UserInfo();
- u4.setUserId(10003);
- u4.setUserName("赵六");
- u4.setPassword("333333");
- userInfosMap.put(u1.getUserId()+"", u1);
- userInfosMap.put(u2.getUserId()+"", u2);
- userInfosMap.put(u3.getUserId()+"", u3);
- userInfosMap.put(u4.getUserId()+"", u4);
- return "map";
- }
- /**
- * <p>
- * 获得对象,也就是通过表达获得对象(异步的)
- * </P>
- * @return
- */
- public String gainUserInfo(){
- System.out.println("用户ID:"+userInfo.getUserId());
- System.out.println("用户名:"+userInfo.getUserName());
- System.out.println("密码:"+userInfo.getPassword());
- return "userInfo";
- }
- /**
- * 获得单个值就不用写了和平常一样
- */
- }
- json教程从入门到使用
- json教程从入门到使用
- json教程从入门到使用
- json教程从入门到使用
- Markdown教程:从入门到入门
- 从菜鸟到入门,掌握 JSON
- 腾讯云使用教程 基本工具 开发工具软件 从入门到精通 图文教程
- 汇编语言程序教程:从入门到精通!
- 汇编语言程序教程:从入门到精通!
- 汇编语言程序教程:从入门到精通!
- JavaScript教程--从入门到精通(一)
- JavaScript教程--从入门到精通
- JavaScript教程--从入门到精通(1)
- jJavaScript教程--从入门到精通(2)
- jJavaScript教程--从入门到精通(2)
- JavaScript教程--从入门到精通(3)
- JavaScript教程--从入门到精通(4)
- JavaScript教程--从入门到精通(5)
- 最美不过少年时,红尘走马,步步相随
- C++ Primer 7.33 练习编写成员函数
- c++ 时间类型详解 time_t
- 剪时光碎片,共度人间烟雨
- AttributeError: Values instance has no attribute 'settings'
- json教程从入门到使用
- Linux命令:lsof命令
- 传感器和骁龙SDK:抢先发布产品
- 编译原理
- 求最长回文串 O(n)的manacher算法
- PhoneGap和Cordova的区别
- C++虚函数的原理及实现
- socket通信简介
- 7个2011年对SEO的预测