发表于: 2017-08-07 22:12:08

1 997


今天完成的事情:师姐在评论中说项目中一般引用json-taglib,用json:array、json:object、json:property、c:forEach来组装数据,所以根据师姐的指引来重点学习这几个标签。然后把这几个标签一看,好吧来学习一波JSON。


什么是 JSON ?

JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)

JSON 是轻量级的文本数据交换格式

JSON 独立于语言 

JSON 具有自我描述性,更易理解

JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。


JSON-TAGLIB

JSON Objects

json:object标签用于创建JSON对象。对象可以根据需要进行嵌套多次。JSON对象包含的属性,使用增加的属性:JSON标签,如上所述。

这个JSP

<json:object>
   <json:property name="outer" value="foo"/>

   <json:object name="inner">
       <json:property name="innerProp1" value="val1"/>
       <json:property name="innerProp2" value="val2"/>

       <json:object name="inner2">
           <json:property name="inner2Prop1" value="in2p1"/>
           <json:property name="inner2Prop2" value="in2p2"/>
       </json:object>

   </json:object>
</json:object>

将创建这个JSON

{
"outer": "foo",
"inner": {
"innerProp1": "val1",
"innerProp2": "val2",
"inner2": {
"inner2Prop1": "in2p1",
"inner2Prop2": "in2p2"
}
}
}

JSON Properties

您可以使用JSON:Properties标签来显示一个JSON属性。这将一个属性添加到所述数据,对象或数组变量JSON:Properties标签嵌套内。

JSON属性基本上只是名称/值对。这个名字始终是一个字符串,并设置与NAME =“...”的标签属性。有多种方法可以指定被设置为一个JSON属性的值。

这样的一个JSP

<json:object>
   <json:property name="string1" value="this is a string"/>
   <json:property name="string2" value="   and another string   "/>
   <json:property name="untrimmedString"
                  trim="false"
                  value="  and an untrimmed string   " />
   <json:property name="usingTheBody">
       This data is in the tag body.
1+1 is ${1+1}
</json:property>

   <json:property name="bool1" value="${true}"/>
   <json:property name="bool2" value="${false}"/>

   <json:property name="numeric1" value="${1+2}"/>
   <json:property name="numeric2" value="${-500}"/>
   <json:property name="numeric3" value="${123.456}"/>
</json:object>

将会生成这这个JSON

{
"string1": "this is a string",
"string2": "and another string",
"untrimmedString": " and an untrimmed string ",
"usingTheBody": "This data is in the tag body.\r\n 1+1 is 2",
"bool1": true,
"bool2": false,
"numeric1": 3,
"numeric2": -500,
"numeric3": 123.456
}

JSON Array

JSON:Array标记用于创建JSON阵列。JSON阵列可以包括字符串,数值,布尔型,JSON对象,或进一步JSON阵列。有许多方法可让您与互动JSON:数组标记来创建数据

通过使用值的集合或数组项=“...”属性。

集合将被遍历,并且集合中的每个值将被添加到JSON阵列。

该类型集合中的项目遵循相同的规则JSON属性,因此整数将成为JSON数字,布尔将成为JSON布尔等。

这个JSP

<json:object>
   <json:array name="days" items="${days}"/>
   <json:array name="bools" items="${bools}"/>
   <json:array name="numbers" items="${numbers}"/>
</json:object>

将创建这个JASON

{
"days":["Mon","Tue","Wed","Thur","Fri","Sat","Sun"],
"bools":[true,false,true],
"numbers":[1,2,3]
}


为什么要用JSON而不用XML?

1.数据格式比较简单, 易于读写, 格式都是压缩的, 占用带宽小

2.易于解析这种语言, 客户端JavaScript可以简单的通过eval()进行JSON数据的读取

3.因为JSON格式能够直接为服务器端代码使用, 大大简化了服务器端和客户端的代码开发量, 但是完成的任务不变, 且易于维护


XML和JSON的主要组成成分:

XML是element、attribute和element content。

JSON是object、array、string、number、boolean(true/false)和null。


XML要表示一个object (指name-value pair的集合),最初可能会使用element作为object,每个key-value pair 用 attribute 表示:

<student name="John" age="10">


但如个某个 value 也是 object,那么就不可以当作attribute:

<student name="John" age="10">

    <address>

        <country>China</country>

        <province>Guang Dong</province>

        <city>...</city>

        <district>...</district>

        ...

    </address>

</student>


那么,什么时候用element,什么时候用attribute,就已经是一个问题了。而JSON因为有object这种类型,可以自然地映射,不需考虑上述的问题,自然地得到以下的格式。

{

    "name": "John",

    "age" : 10,

    "address" : {

        "country" : "China",

        "province" : "Guang Dong",

        "city" : "..",

        "district" : "..",

        ...

    }

}


那么如何在后端中写取得这样的一个json对象?如下所示

public class Student {
   private String name;
   private int age;
   private Address address;

   public Student() {
      super();
   }

   @JsonCreator
   public Student(
           @JsonProperty("name") String name,
           @JsonProperty("age") int age,
           @JsonProperty("address") Address address) {

        super();
       this.name = name;
       this.age = age;
       this.address = address;
   }

// getters/setters
}

public class Address {
   private String coutry;
   private String city;
   private String province;
   private String district;

   // Constructors, getters/setters
}


明天计划的事情:继续学习

遇到的问题:前端要求所有的数据都要是JSON格式么?看到别人说XML还是有无法取代的地方。

收获:学习json。

进度:任务开始时间 2017.08.07

          预计DEMO时间 2017.08.11

          是否有延期风险:无

禅道:师兄这个我不会搞,师兄教我。


返回列表 返回列表
评论

    分享到