相比于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()); }