java操作json

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。

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);
	}

猜你喜欢

转载自yang2617.iteye.com/blog/1510829