java操作json所依赖的jar包有很多种.这里我使用的是jackson.
首先给出两个javaBean.一个简单类型User和一个相对复杂类型Grade.
User:
package com.supben.bean; import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; @XStreamAlias("user") public class User { // id @XStreamAsAttribute private long id; // 姓名 private String name; // 年龄 private int age; // 绝技 private String famous; public long getId() { return id; } public void setId(long id) { this.id = id; } 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 getFamous() { return famous; } public void setFamous(String famous) { this.famous = famous; } @Override public String toString() { return "User [id=" + id + ", name=" + name + "age=" + age + ", famous=" + famous + "]"; } }
Grade
package com.supben.bean; import java.util.List; import com.thoughtworks.xstream.annotations.XStreamAlias; @XStreamAlias("grade") public class Grade { // id private long id; // 名称 private String name; // 用户集合 private List<User> users; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<User> getUsers() { return users; } public void setUsers(List<User> users) { this.users = users; } @Override public String toString() { return "Grade [id=" + id + ", name=" + name + ", users=" + users + "]"; } }
jackson为我们很好的封装了ObjectMapper类.可以很方便的对json进行读和写.
package com.supben.json; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.codehaus.jackson.map.ObjectMapper; public class JsonHandler { /** * 将对象以json的形式输出 */ public static void writeToJson(Object obj, OutputStream os) throws Exception{ ObjectMapper mapper = new ObjectMapper(); mapper.writeValue(os, obj); os.close(); } /** * 从json中读到对象中 */ public static void readFromJson(InputStream is, Object obj) throws IOException { ObjectMapper mapper = new ObjectMapper(); mapper.readValue(is, obj.getClass()); is.close(); } }
下面我们就对这两个方法进行测试.
@Test public void writeUser() throws Exception { User qf = new User(); qf.setId(1); qf.setName("乔峰"); qf.setAge(31); qf.setFamous("降龙十八掌"); OutputStream os = new FileOutputStream("d:/qf.json"); JsonHandler.writeToJson(qf, os); }
我们会在D盘得到一个qf.json的文件.用记事本打开显示如下内容:
{"age":31,"famous":"降龙十八掌","name":"乔峰","id":1}
@Test public void writeGrade() throws Exception { List<User> users = new ArrayList<User>(); User qf = new User(); qf.setId(1); qf.setName("乔峰"); qf.setAge(31); qf.setFamous("降龙十八掌"); User dy = new User(); dy.setId(1); dy.setName("段誉"); dy.setAge(20); dy.setFamous("六脉神剑"); User xz = new User(); xz.setId(1); xz.setName("虚竹"); xz.setAge(24); xz.setFamous("天山六阳掌"); users.add(qf); users.add(dy); users.add(xz); Grade grade = new Grade(); grade.setId(1); grade.setName("天龙八部"); grade.setUsers(users); OutputStream os = new FileOutputStream("d:/grade.json"); JsonHandler.writeToJson(grade, os); }
同样,在D盘得到grade.json.用记事本打开,
{"users":[{"age":31,"famous":"降龙十八掌","name":"乔峰","id":1},{"age":20,"famous":"六脉神剑","name":"段誉","id":1},{"age":24,"famous":"天山六阳掌","name":"虚竹","id":1}],"name":"天龙八部","id":1}
下面我们在来读取grade.json里面的内容.
@Test public void readeGrade() throws Exception { Grade grade = new Grade(); InputStream is = new FileInputStream("d:/grade.json"); JsonHandler.readFromJson(is, grade); System.out.println(grade); }