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
















