前言
json,xml用于都可以用于网络间数据传输的格式,比较轻量级,类似于一个传输协议,同时可以被js解析。网络间还有一种对象流传输方式,但是传输者之间约定的条件要更多。
json的主要格式就是{“key”:“value”,“key”:“value”}。javabean在重写Object的toString()方法时,返回结果也是一个json格式的。那么如何将一个对象转换成json字符串呢。
有如下几种方式:
1.非集合类型。
(1)toString()方法。对于非集合类型,重写的toString方法就可以满足。当然该类的内部也不能有集合类型。当然如果项目中所有类均重写toString方法,有集合也是可以的,所以对项目的规范要求比较高。
(2)使用JsonObject与JsonArray类,对于标准的pojo类(javaBean),使用JSONArray sub = JSONArray.fromObject(object),然后调用json.toString()方法。
2.对于集合类
(1)使用JsonObject与JsonArray类(来自org.json.JSONArray与org.json.JSONObject
List<Article> al = articleMng.find(f); System.out.println(al.size()); HttpServletResponse hsr = ServletActionContext.getResponse(); if(null == al){ return ; } for(Article a : al){ System.out.println(a.getId()+a.getDescription()+a.getTitle()); } JSONArray json = new JSONArray(); for(Article a : al){ JSONObject jo = new JSONObject(); jo.put("id", a.getId()); jo.put("title", a.getTitle()); jo.put("desc", a.getDescription()); json.put(jo); } try { System.out.println(json.toString()); hsr.setCharacterEncoding("UTF-8"); hsr.getWriter().write(json.toString()); } catch (IOException e) { e.printStackTrace(); }
(2)使用net.sf.json包下JSONArray的静态方法:fromObject(list) 。
--------------------------------------------------------------------------------------------------------------------
fastjson 阿里巴巴温少写的一个将Object转为json的包
package com.nubb.bean; import java.io.Serializable; public class Person implements Serializable{ private static final long serialVersionUID = 1L; private String name; private int age; private String address; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
package com.nubb.test; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardOpenOption; import java.util.ArrayList; import java.util.List; import com.alibaba.fastjson.JSON; import com.nubb.bean.Person; public class JSONSerializer { private static final String DEFAULT_CHARSET_NAME = "UTF-8"; public static <T> String serialize(T object) { return JSON.toJSONString(object); } public static <T> T deserialize(String string, Class<T> clz) { return JSON.parseObject(string, clz); } public static <T> T load(Path path, Class<T> clz) throws IOException { return deserialize( new String(Files.readAllBytes(path), DEFAULT_CHARSET_NAME), clz); } public static <T> void save(Path path, T object) throws IOException { if (Files.notExists(path.getParent())) { Files.createDirectories(path.getParent()); } Files.write(path, serialize(object).getBytes(DEFAULT_CHARSET_NAME), StandardOpenOption.WRITE, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING); } public static void main(String[] args) { Person person1 = new Person(); person1.setAddress("address"); person1.setAge(11); person1.setName("amao"); Person person2 = new Person(); person2.setAddress("address"); person2.setAge(11); person2.setName("amao"); List<Person> lp = new ArrayList<Person>(); lp.add(person1); lp.add(person2); System.out.println(serialize(lp)); } }输出:
[{"address":"address","age":11,"name":"amao"},{"address":"address","age":11,"name":"amao"}]
此外通过对象序列化的方式来构建json字符串也有许多开源框架
GSON:http://blog.csdn.net/axuanqq/article/details/51441590
Jsckson: http://itindex.net/detail/51074-java-%E5%88%A9%E7%94%A8-jackson
FastJson:http://blog.csdn.net/glarystar/article/details/6654494
三种性能比较:http://blog.csdn.net/accountwcx/article/details/50252657
关注微信公众号每天学习一点程序员的职业经