Json在java中的使用
2016-04-29 09:40
405 查看
1、json的基本知识
JSON: JavaScript Object Notation(JavaScript 对象表示法)
JSON 是存储和交换文本信息的语法。类似 XML。
JSON 比 XML 更小、更快,更易解析。
2.
无需解析器,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。
3. 数据类型(6)种
数字 123
字符串 "firstName":"John"
数组 ["firstName":"John" , "lastName":"Doe" ]
对象 { "firstName":"John" , "lastName":"Doe" }
逻辑 true / false
null null
4、使用场景:
一般用于不同语言之间的数据传递
js + java != 后台查询的数据放到list中,在转换成json才能被前台的js解析。
下面的测试用例已经覆盖了常用的格式转换
另外这里我写了下最基本的JsonArray的转换方法
JSON: JavaScript Object Notation(JavaScript 对象表示法)
JSON 是存储和交换文本信息的语法。类似 XML。
JSON 比 XML 更小、更快,更易解析。
2.
无需解析器,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。
3. 数据类型(6)种
数字 123
字符串 "firstName":"John"
数组 ["firstName":"John" , "lastName":"Doe" ]
对象 { "firstName":"John" , "lastName":"Doe" }
逻辑 true / false
null null
4、使用场景:
一般用于不同语言之间的数据传递
js + java != 后台查询的数据放到list中,在转换成json才能被前台的js解析。
下面的测试用例已经覆盖了常用的格式转换
package ray.json; import java.util.Date; import net.sf.json.JSONObject; import net.sf.json.JSONSerializer; import net.sf.json.JsonConfig; import net.sf.json.util.CycleDetectionStrategy; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; public class TestJson { public static Student student; @BeforeClass public static void setUpBeforeClass() throws Exception { System.out.println("--------Before-------"); student = new Student(); } @AfterClass public static void tearDownAfterClass() throws Exception { System.out.println("--------After-------"); student = null; } //测试默认转换,用于处理比较简单的情况,例如知道对象的类型为student //而很多情况是不知道对象的类型的,这就需要自定义json格式或者为map(见下面testCase) @Test public void test1(){ student.setId(1); student.setName("雷子诺"); System.out.println(JSONSerializer.toJSON(student)); } @Test//测试静态字段转换 public void test2(){ student.setId(1); student.setName("雷子诺"); student.setAge(1); //默认情况下静态字段是不会转换为json对象的,因为静态字段是属于类,而非对象 //解决方法:自定义json格式或者转换为map JSONObject object = new JSONObject(); object.put("Myid", student.getId()); object.put("myName", student.getName()); object.put("myAge", student.getAge()); System.out.println(object); } @Test // 解决自关联的问题 public void test3() { student.setDate(new Date()); student.setName("雷子诺"); student.setAge(1); //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)); } @Test // 通过自定义日期的处理类,来格式化日期数据 public void test5() { student.setDate(new Date()); student.setName("雷子诺"); JsonConfig config=new JsonConfig(); // 指定某个Json类型的处理方式 DataJsonValueProcessor dataValue=new DataJsonValueProcessor(); config.registerJsonValueProcessor(Date.class, dataValue); System.out.println(JSONObject.fromObject(student, config)); } }看下Student类:
package ray.json; import java.util.Date; public class Student { private int id; private String name; private static int age; private Date date; //自关联情况。 private Student student /*= this*/; public Student getStudent() { return student; } public void setStudent(Student student) { this.student = student; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public static int getAge() { return age; } public static void setAge(int age) { Student.age = age; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", date=" + date + "]"; } }输出结果自己跑下测试用例。
另外这里我写了下最基本的JsonArray的转换方法
package ray.json; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class JSon { public static JSONObject object = new JSONObject(); public static void main(String[] args) { testList(); testMap(); testBean(); testArray(); testCommon(); testObject(); } //封装到JsonObject中,在需要的地方解析Json即可 private static void testObject() { System.out.println(object); } //一般数据转换成json代码 private static void testCommon() { JSONArray jsonAry = JSONArray.fromObject("['Uno','is', '梓诺的', 'father']" ); //["Uno","is","梓诺的","father"] System.out.println(jsonAry); object.put("jsonCommonAry", jsonAry); } //数组转换成json代码 private static void testArray() { boolean[] ary = new boolean[] { true, false, true }; JSONArray jsonAry = JSONArray.fromObject(ary); //[true,false,true] System.out.println(jsonAry); object.put("jsonAry", jsonAry); } //Bean转为Json,注意这个Bean一定要是public的class,否则抛异常 private static void testBean() { Student student = new Student(); student.setId(1); student.setName("雷梓诺"); JSONObject jsonObject = JSONObject.fromObject(student); //{"id":1,"name":"雷梓诺"} System.out.println(jsonObject); object.put("Bean", jsonObject); } //Map集合转换成json方法 private static void testMap() { Map<String, Object> map = new HashMap<String, Object>(); map.put("name", "雷梓诺"); map.put("bool", Boolean.TRUE); map.put("int", null); map.put("arr", new String[] { "a", "b" }); // map.put(null, null);//JSON keys cannot be null. map.put("func", "function(i){ return this.arr[i]; }"); JSONObject json = JSONObject.fromObject(map); //{"arr":["a","b"],"int":null,"name":"雷梓诺","func":function(i){ return this.arr[i]; },"bool":true} System.out.println(json); object.put("jsonMap", json); } //List集合转换成json方法 private static void testList() { List<String> list = new ArrayList<String>(); list.add( "first" ); list.add( "second" ); JSONArray ary = JSONArray.fromObject( list ); System.out.println(ary);//["first","second"] object.put("list", ary); } }
相关文章推荐
- java排序之快排
- Java URL自定义私有网络协议
- struts2标签库详解
- spring对乱码的处理及其springmvc核心器注册
- 详解备忘录模式及其在Java设计模式编程中的实现
- Dubbo与Zookeeper SpringMVC整合和使用(负载均衡 容错)
- spring 解决多数据源问题,主要的继承类为AbstractRoutingDataSource
- 转:Eclipse常见问题,快捷键收集
- 在Java里处理文件的技巧
- [转]MyEclipse for Spring2014破解
- windows7环境下为eclipse安装CDT插件
- Eclipse安装Freemarker插件
- 升级Struts2版本到2.3.28.1,
- 在Java里处理文件的技巧
- 正则表达式知识详解之替换 (java版示例)
- RPC应用的java实现(转)
- 4.29 java
- Java模糊查询方法详解
- 图文详解Java环境变量配置方法
- 解析Java程序中对象内存的分配和控制的基本方法