发表于: 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
是否有延期风险:无
禅道:师兄这个我不会搞,师兄教我。
评论