首页 > 技术文章 > json的解析和生成

zhisuoyu 2016-03-07 10:26 原文

相比于xml,json的主要特点是数据小,解析速度快,但是描述性差。

java中常见的json解析方法有Gson、Jackson、JSON.simple。

从解析速度上来看,Gson适合解析小数据量,Jackson适合解析大数据量的,JSON.simple解析大数据量和小数据量速率都很快。

先展示一下接下来要生成和解析的json数据:

{
    "users": [
        {
            "phone": "138****", 
            "pwd": "123456", 
            "username": "zhangsan"
        }, 
        {
            "phone": "158****", 
            "pwd": "abc", 
            "username": "lisi"
        }
    ]
}

 

一、org.json 

这个是android自带的解析方法。

生成:

    public static String createJson() {
        JSONObject json = new JSONObject();
        JSONArray jsonUsers = new JSONArray();
        json.put("users", jsonUsers);
        JSONObject jsonUser1 = new JSONObject();
        JSONObject jsonUser2 = new JSONObject();
        jsonUsers.put(jsonUser1);
        jsonUsers.put(jsonUser2);

        jsonUser1.put("username", "zhangsan");
        jsonUser1.put("pwd", "123456");
        jsonUser1.put("phone", "138****");
        
        jsonUser2.put("username", "lisi");
        jsonUser2.put("pwd", "abc");
        jsonUser2.put("phone", "158****");
        return json.toString();

    }

 

解析:

    public static void parseJson(String jsonStr){
        JSONObject json =new JSONObject(jsonStr);
        JSONArray jsonUsers=json.getJSONArray("users");
        System.out.println(jsonUsers.length());
        for (int i = 0; i < jsonUsers.length(); i++) {
            JSONObject jsonUser=(JSONObject) jsonUsers.get(i);
            System.out.print("user"+i+"[");
            System.out.print("username:"+jsonUser.get("username"));
            System.out.print(", pwd:"+jsonUser.get("pwd"));
            System.out.println(", phone:"+jsonUser.get("phone")+"]");
        }
    }

 

二、Gson

解析:

首先得创建相应的类:

public class User {
	private String phone;
	private String pwd;
	private String username;
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	@Override
	public String toString() {
		return "User [phone=" + phone + ", pwd=" + pwd + ", username=" + username + "]";
	}
	
}

  

public class Users {
    private List<User> users;

    public List<User> getUsers() {
        return users;
    }

    public void setUsers(List<User> users) {
        this.users = users;
    }

    @Override
    public String toString() {
        return "Users [users=" + users + "]";
    }
    
    
}

解析方法:

    public static void parseJson(String jsonStr) {
        Gson gson=new Gson();
        Users users=gson.fromJson(jsonStr, Users.class);
        System.out.println(users);

    }

如何json数据整体就是一个数组,如下:

[
    {
        "phone": "138****", 
        "pwd": "123456", 
        "username": "zhangsan"
    }, 
    {
        "phone": "158****", 
        "pwd": "abc", 
        "username": "lisi"
    }
]

 

解析方法:

    public static void parseJson(String jsonStr) {
        Gson gson=new Gson();
        List<User> users;
        users=gson.fromJson(jsonStr, new TypeToken<List<User>>(){}.getType());
        System.out.println(users);

    }

生成:

    public static <T> String createJson(T t){
        Gson gson=new Gson();
        String rt=gson.toJson(t);
        return rt;
        
    }

 

 

三、JSON.simple

    public static void parseJson(String filename) {
        try {
            JSONParser parser = new JSONParser();
            Object obj = parser.parse(new FileReader(filename));
            JSONObject jsonObject = (JSONObject) obj;

            JSONArray jsonUsers = (JSONArray) jsonObject.get("users");

            Iterator<JSONObject> iterator = jsonUsers.iterator();
            while (iterator.hasNext()) {
                JSONObject jsonUser = iterator.next();
                System.out.print("user[");
                System.out.print("username:" + jsonUser.get("username"));
                System.out.print(", pwd:" + jsonUser.get("pwd"));
                System.out.println(", phone:" + jsonUser.get("phone") + "]");
            }
        } catch (IOException | ParseException e) {
            e.printStackTrace();
        }

    }

    public static void createJson() {
        JSONObject json = new JSONObject();
        JSONArray jsonUsers = new JSONArray();
        json.put("users", jsonUsers);
        JSONObject jsonUser1 = new JSONObject();
        JSONObject jsonUser2 = new JSONObject();
        jsonUsers.add(jsonUser1);
        jsonUsers.add(jsonUser2);

        jsonUser1.put("username", "zhangsan");
        jsonUser1.put("pwd", "123456");
        jsonUser1.put("phone", "138****");
        jsonUser2.put("username", "lisi");
        jsonUser2.put("pwd", "abc");
        jsonUser2.put("phone", "158****");

        System.out.println(json.toJSONString());
    }

 

推荐阅读