JSON详解

来源:互联网 发布:浪拍云的淘宝人生 编辑:程序博客网 时间:2024/05/22 03:09

本篇本人学习理解JSON的学习记录用,共同进步,欢迎指点。

JSON概念

JSON(JavaScript Object Notation),即JavaScript对象表示法,它是用于轻量级数据交互,完全独立于语言的 文本格式,取代XML格式的繁琐标记。JSON易于程序员阅读和编写,同时也易于机器解析生成。

JSON的两种结构

JSON有两种结构:1、对象。2、数组
1。对象:对象在js中表示为{}里面的内容,key/value 构成,value 的值可以是true、false、null、对象或数组。
数据结构如下:
{
   key1:value1,//例如 "name":"张三"
   key2:value2,//“age”:22
    ...
}

2.数组:数组表示一系列有序的值。
数据结构:`
[
{
key1:value1,
key2:value2
},
{
key3:value3,
key4:value4
}
]

JSON字符串:var str =‘{ “name”: “李四”, “sex”: “man” }’;
JSON对象:var jsobj ={ “name”: “李四”, “sex”: “man” };

JSON字符串和对象的转换

一、JSON字符串转换为JSON对象。
注意区分字符串和JSON字符串的区别。
字符串:使用“”双引号或’’单引号包括的字符。
json字符串:符合json格式要求的js字符串。
var obj = JSON.parse(str);
JSON.parse(). 现在大多数浏览器都支持这个方法,是推荐使用的方法。

二、JSON对象转JSON字符串
var str2 = JSON.stringify(jsobj);
默认情况下,JSON.stringify()输出的JSON字符串不包括任何空格字符或缩进。

在JS中使用JSON

JSON的读写有两种方式:一、利用”.”操作符二、“[key]”的方式。

var obj = {
1: “value1”,
“2”: “value2”,
person: [ //数组结构JSON对象,可以嵌套使用
{
id: 1,
name: “张三”
},
{
id: 2,
name: “李四”
}
],
object: { //对象结构JSON对象
id: 1,
msg: “对象里的对象”
}
};
1.从JSON中读数据
function readJSON(){
alert(obj.1); //会报语法错误,可以用alert(obj[“1”]);说明数字最好不要做关键字
alert(obj.person[0].name); //或者alert(obj.person[0][“name”])
alert(obj.object.msg); //或者alert(obj.object[“msg”])
}

2.向JSON中写数据
function write(){
//往JSON对象中增加了一条记录
obj.sex= “男” //或者obj[“sex”]=”男”
}
3.修改JSON中的cout的值
function Update() {
obj.count = 10; //或obj[“count”]=10
}
4.删除JSON中数据
delete obj.count;

处理客户端提交的JSON数据

客户端提交过来的数据一般是JSON字符串,我们一般处理方式为将JSON字符串转换为JSON对象,
可以利com.alibaba.fastjson快速序列化转换。

Ajax使用JSON传递数据

使用jQuery实现Ajax时,客户端可以使用$.getJSON()向服务器端发送JSON格式的数据,服务器端也可以向客户端返回JSON格式的数据。
格式:

$.getJSON(   请求路径,   JSON格式的请求数据,    function(result,textStatus,xhr) {     请求成功后执行   });

客户端:json.jsp

<script type="text/javascript"> function isExist()  {  var $mobile = $("#mobile").val();  if ($mobile == null || $mobile.length != 11)   {   $("#tip").html("请输入正确的手机号码!");  } else   {      $.getJSON('MobileJSONServlet',{mobileNum: $mobile},function(result){                $("#tip").html(result.msg);                 });   }  }    …</head><body> <form action="">  <input type="text" id="mobile" /> <font color="red" id="tip"></font><br />  <input type="button" value="绑定" onclick="isExist()" /> </form></body>

服务器端:MobileJSONServlet.java

/import…public class MobileJSONServlet extends HttpServlet{ protected void doGet(…) throws ServletException, IOException {  this.doPost(request, response); } protected void doPost(…) throws ServletException, IOException {  response.setContentType("text/html;charset=UTF-8");  PrintWriter out = response.getWriter();  String mobile = request.getParameter("mobileNum");  if("1888".equals(mobile)) {    //返回json格式的数据 {"msg":"此号码已经被绑定"}    out.print("{\"msg\":\"此号码已经被绑定,请尝试其他号码!\"}");    } else {     //返回JSON格式的数据 {"msg":"绑定成"}      out.print("{\"msg\":\"绑定成功!\"}");    }    out.close();  }  }

客户端使用.getJSON向服务器端MobileJSONServlet发送JSON数据{mobileNum:mobile},服务器端接收到mobileNum的值后再以JSON对象的格式返回给客户端,如{“msg”:”绑定成功!”}。最后,客户端再解析服务器端返回的JSON值,如result.msg。
上述的服务器端代码MobileJSONServlet中,是通过字符串拼接的形式向客户端返回了JSON形式的结果,如{“msg”:”绑定成功!”}。除此之外,我们还可以在服务器端中使用JSONObject类来产生JSON对象,并返回给客户端,如下:
客户端:json.jsp

<script type="text/javascript"> function jsonObjectTest()  {  var stuName = $("#stuName").val();  var stuAge = $("#stuAge").val();  $.getJSON('JSONObjectServlet',{name:stuName,age:stuAge},function(result){           var student =  eval(result.stu);             alert(student.name+","+student.age);            }); } </script></head><body> <form action=""> 姓名:<input type="text" name="stuName" id="stuName"><br/> 年龄:<input type="text" name="stuAge" id="stuAge"><br/><input type="button" value="绑定" onclick="jsonObjectTest()" /> </form></body>

服务器端:使用JSONObject,需要给项目导入jar文件:

commons-beanutils.jar commons-collections-3.2.1.jar commons-lang-2.6.jar commons-logging-1.1.1.jar ezmorph-1.0.6.jar json-lib-2.3-jdk15.jar

JSONObjectServlet.java

import net.sf.json.JSONObject;public class JSONObjectServlet extends HttpServlet { protected void doGet(…) throws ServletException, IOException  {  this.doPost(request, response);} protected void doPost(…) throws ServletException, IOException {   response.setContentType("text.html;charset=utf-8"); PrintWriter out = response.getWriter(); String name = request.getParameter("name"); int age = Integer.parseInt(request.getParameter("age"));Student.setName(name);Student.setAge(age); JSONObject json = new JSONObject();//将student对象放入json对象中 json.put("stu",student);//类似{"stu":student} out.print(json) }}

客户端通过$.getJSON()向服务器端JSONObjectServlet发送请求,并传递JSON格式的数据{name:stuName,age:stuAge}.服务器将客户端的数据封装到Student对象之中,之后再将Student对象加入到JSONObject对象之中,并把JSONObject对象返回给客户端。最后,客户端通过回调函数的参数result接收到JSONObject对象,并通过eval(result.stu)将JSONObject对象之中的stu转义为JSON字符串格式,再用student.name等拿到需要使用的值。

原创粉丝点击