日期:2014-05-16  浏览次数:20377 次

json生成和解析
json生成和解析

package fastjson;

import java.util.*;

import com.alibaba.fastjson.JSON;
class User{
	private String name;
	private int age;
	public User(){
	}
	public User(String name,int age){
		this.name = name;
		this.age = age;
	}
	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;
	}
}
class Group{
	private String id;
	private String name;
	private List<User> users = new ArrayList<User>();
	public String getId() {
		return id;
	}
	public void setId(String 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;
	}
}
public class Main {
	public static void main(String[] args) {
		Group group = new Group();
		group.setId("01");
		group.setName("team gourp");
		List<User> users = new ArrayList<User>();
		users.add(new User("tomcat",12));
		users.add(new User("jerry",12));
		group.setUsers(users);
		//转成json字符串
		String jsonString = JSON.toJSONString(group);
		System.out.println(jsonString);
		//将json字符串转成对象
		Group g = JSON.parseObject(jsonString, Group.class);
		System.out.println(g.getUsers().get(0).getName());
	}
}


控制台打印如下:
{"id":"01","name":"team gourp","users":[{"age":12,"name":"tomcat"},{"age":12,"name":"jerry"}]}
tomcat


上面用到的转JSON的类是来自阿里巴巴的牛人写的fastjson,我把jar包和源码都贴到下面,有想用的自己下载下来看看。

1、JS自带方法eval()解析JSON字符串

将上面输出的JSON字符串放入eval()中解析:

<html>
	<head>
		<script type="text/javascript">
			var obj = eval("("+'{"id":"01","name":"team gourp","users":[{"age":12,"name":"tomcat"},{"age":12,"name":"jerry"}]}'+")");
			alert(obj.id+","+obj.users[0].name+","+obj.users[1].name);
		</script>
	</head>
</html>


页面弹出对话框,显示如下:

01,tomcat,jerry


这里注意下不能直接把json字符串放到eval()的括号里面,由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语 句(statement)来执行。


出了上面的eval()方法解析json字符串,下面这个也同样奏效
var json='{"name":"CJ","age":18}';

data =(new Function("","return "+json))();


大家可以试试。