JSON
2016-01-18 16:45
741 查看
JSON:
JavaScript Object Natation:JavaScript的对象表现形式,一种轻量级的数据交换格式。特点:完全独立于语言的文本格式,跨平台,有结构,方便人和机器解析。
使用场景:不同语言之间的传递
Json与Xml、Properties的区别:
Json是轻量级,Xml是重量级,xml一般用于框架配置Json是有结构的, 但是Properties仅仅key-value
Json的格式:
An object is an unordered set ofname/value pairs. An object begins with { (left brace) and
ends with } (right brace).
Each name is followed by : (colon) and
the name/value pairs are separated by , (comma).
An array is an ordered collection of values. An array begins with [ (left bracket) and ends with ] (right bracket).
Values are separated by , (comma).
A value can be a string in double quotes, or a number, or true or false or null, or
an object or an array. These structures can be nested.
A string is a sequence of zero or more Unicode characters, wrapped in double quotes, using backslash escapes. A character is represented as a single character string. A string is very much like a C or Java
string.
A number is very much like a C or Java number, except that the octal and hexadecimal formats are not used.
使用Jar包:
commons-beanutils-1.8.0.jar
commons-collections-3.2.1.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
ezmorph-1.0.6.jar
json-lib-2.4-jdk15.jar
测试Java对象转成Json的格式:<span style="white-space:pre"> </span>@Test public void test() { grade.setId(1); grade.setName("繁花似锦"); System.out.println(JSONSerializer.toJSON(grade)); }
输出:{"id":1,"name":"繁花似锦","students":[]}
测试数组的JSON表现形式:
<span style="white-space:pre"> </span>@Test public void test2() { grade.setId(1); grade.setName("java"); Student student = new Student(); student.setName("小王"); student.setDate(new Date()); Student student2 = new Student(); student2.setName("小李"); student2.setDate(new Date()); List<Student> stuList = new ArrayList<Student>(); stuList.add(student); stuList.add(student2); grade.setStudents(stuList); System.out.println(JSONSerializer.toJSON(grade)); }
输出:{"id":1,"name":"java","students":[{"age":0,"date":{"date":18,"day":1,"hours":16,"minutes":41,"month":0,"seconds":48,"time":1453106508661,"timezoneOffset":-480,"year":116},"name":"小王"},{"age":0,"date":{"date":18,"day":1,"hours":16,"minutes":41,"month":0,"seconds":48,"time":1453106508661,"timezoneOffset":-480,"year":116},"name":"小李"}]}
测试static是不能转化为json属性的:
package com; import java.util.Date; public class Student { private String name; private Date date; private <span style="color:#ff0000;">static </span>int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public <span style="font-family: Arial, Helvetica, sans-serif;"><span style="color:#ff0000;">static </span></span><span style="font-family: Arial, Helvetica, sans-serif;">int getAge() {</span> return age; } public static void setAge(int age) { Student.age = age; } }1、将get的static去掉
public <span style="font-family: Arial, Helvetica, sans-serif;"><span style="color:#ff0000;"><del>static </del></span></span><span style="font-family: Arial, Helvetica, sans-serif;">int getAge() {</span>2、 如果返回的是static,或者返回的类型不确定,那么可以采用map或者自己构建json格式
<span style="white-space:pre"> </span>JSONObject obj = new JSONObject(); obj.put("age", student.getAge()); obj.put("name", student.getName()); obj.put("date", student.getDate()); System.out.println(obj.toString());
输出:{"age":12,"name":"ad","date":{"date":18,"day":1,"hours":16,"minutes":40,"month":0,"seconds":48,"time":1453106448797,"timezoneOffset":-480,"year":116}}
解决自关联:
package com; import java.util.Date; public class Student { private String name; private Date date; private int age; <span style="color:#ff0000;">private Student student = this;</span> public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
<span style="white-space:pre"> </span>@Test // 解决自关联的问题 public void test4() { student.setDate(new Date()); student.setName("admin"); //student.setStudent(new Student()); // 通过配置jsonConfig来过滤相应的参数 JsonConfig config=new JsonConfig(); // 设置需要排除哪些字段, 例如排除密码字段 config.setExcludes(new String[]{"date"}); // 设置如果有些字段是自关联则过滤 STRICT: 缺省值,是否自关联都要转化 // LENIENT: 如果有自关联对象,则值设置为null // NOPROP: 如果自关联则忽略属性 config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT); System.out.println(JSONObject.fromObject(student, config)); }输出:
NOPROP:{"age":12,"name":"ad"}
STRICT:
LENIENT:{"age":12,"name":"ad","student":null}
通过自定义日期的处理类,来格式化日期数据
创建类实现JsonValueProcessor接口:package com; import java.text.SimpleDateFormat; import java.util.Date; import net.sf.json.JsonConfig; import net.sf.json.processors.JsonValueProcessor; public class DateJsonValueProcessor implements JsonValueProcessor { @Override public Object processArrayValue(Object arg0, JsonConfig arg1) { return null; } /** * arg0:属性名 * arg1:转换对象 * arg2:JSON数据转换配置 */ @Override public Object processObjectValue(String arg0, Object arg1, JsonConfig arg2) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm"); return sdf.format((Date)arg1); } }
@Test // 通过自定义日期的处理类,来格式化日期数据 public void test6() { student.setDate(new Date()); student.setName("admin"); JsonConfig config=new JsonConfig(); // 指定某个Json类型的处理方式 DateJsonValueProcessor processor = new DateJsonValueProcessor(); config.registerJsonValueProcessor(Date.class, processor); System.out.println(JSONObject.fromObject(student, config)); }
输出:
{"age":0,"date":"2016-01-18 04:35","name":"admin"}
相关文章推荐
- 学习JavaScript设计模式之责任链模式
- js检查元素是否包括在数组中
- uglifyjs note
- js回调函数(callback)
- Javascript学习笔记05——引用类型
- 工作中遇到到jsp<c:forEach>应用遍历时用逗号隔开,遍历到最后一个时用句号
- 谈谈Ext JS的组件——布局的用法续二
- javascript 学习资料网址一览
- DOM 事件下拉菜单实例
- 对json格式的数据进行解析
- 在客户端使用JSONP做跨域请求
- 图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
- cJson 创建与解析
- 利用Javascript来创建Ubuntu Scope
- javascript逻辑运算符“||”和“&&”
- 图片左右滚动的js代码
- JSP自定义标签由浅到深详细讲解(全)
- 简易富文本编辑器
- JSON
- DOM事件探秘之三-键盘事件