//要解析的message.json文件如下
1 [ 2 { 3 "id": 912345678901, 4 "text": "How do I read a JSON stream in Java?", 5 "geo": null, 6 "user": { 7 "name": "json_newb", 8 "followers_count": 41 9 } 10 }, 11 { 12 "id": 912345678902, 13 "text": "@json_newb just use JsonReader!", 14 "geo": [50.454722, -104.606667], 15 "user": { 16 "name": "jesse", 17 "followers_count": 2 18 } 19 } 20 ]
先写Message类和User类

1 import java.util.ArrayList; 2 3 public class Message { 4 private long id; 5 private String text; 6 private ArrayList<Double> geo; 7 private User user; 8 9 public Message() { 10 } 11 12 public Message(long id, String text, ArrayList<Double> geo, User user) { 13 super(); 14 this.id = id; 15 this.text = text; 16 this.geo = geo; 17 this.user = user; 18 } 19 20 public long getId() { 21 return id; 22 } 23 24 public void setId(long id) { 25 this.id = id; 26 } 27 28 public String getText() { 29 return text; 30 } 31 32 public void setText(String text) { 33 this.text = text; 34 } 35 36 public ArrayList<Double> getGeo() { 37 return geo; 38 } 39 40 public void setGeo(ArrayList<Double> geo) { 41 this.geo = geo; 42 } 43 44 public User getUser() { 45 return user; 46 } 47 48 public void setUser(User user) { 49 this.user = user; 50 } 51 52 @Override 53 public String toString() { 54 return "Message [id=" + id + ", text=" + text + ", geo=" + geo + ", user=" + user + "]"; 55 } 56 57 }

1 public class User { 2 private String name; 3 private int followers_count; 4 5 public String getName() { 6 return name; 7 } 8 9 public void setName(String name) { 10 this.name = name; 11 } 12 13 public int getFollowers_count() { 14 return followers_count; 15 } 16 17 public void setFollowers_count(int followers_count) { 18 this.followers_count = followers_count; 19 } 20 21 @Override 22 public String toString() { 23 return "User [name=" + name + ", followers_count=" + followers_count + "]"; 24 } 25 26 }
接下来就是解析部分的代码了
1 import java.io.IOException; 2 import java.io.InputStream; 3 import java.io.InputStreamReader; 4 import java.util.ArrayList; 5 6 import com.google.gson.stream.JsonReader; 7 import com.google.gson.stream.JsonToken; 8 9 public class Jsontest2 { 10 public static void main(String[] args) { 11 InputStream iStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("message.json"); 12 InputStreamReader in = new InputStreamReader(iStream); 13 JsonReader reader = new JsonReader(in); 14 ArrayList<Message> list = readMessageArray(reader); 15 for (Message m : list) { 16 System.out.println(m); 17 } 18 } 19 20 // 解析数组 21 public static ArrayList<Message> readMessageArray(JsonReader reader) { 22 ArrayList<Message> list = new ArrayList<>(); 23 try { 24 reader.beginArray(); 25 while (reader.hasNext()) { 26 list.add(readMessage(reader)); 27 } 28 reader.endArray(); 29 } catch (IOException e) { 30 e.printStackTrace(); 31 } 32 return list; 33 } 34 35 // 解析对象 36 public static Message readMessage(JsonReader reader) { 37 Message message = new Message(); 38 try { 39 reader.beginObject(); 40 while (reader.hasNext()) { 41 String name = reader.nextName(); 42 if ("id".equals(name)) { 43 message.setId(reader.nextLong()); 44 } else if ("text".equals(name)) { 45 message.setText(reader.nextString()); 46 } else if ("geo".equals(name) && reader.peek() != JsonToken.NULL) { 47 message.setGeo(readGeo(reader)); 48 } else if ("user".equals(name)) { 49 message.setUser(readUser(reader)); 50 } else { 51 reader.skipValue(); 52 } 53 } 54 reader.endObject(); 55 } catch (Exception e) { 56 e.printStackTrace(); 57 } 58 return message; 59 } 60 61 // 解析Geo数组 62 public static ArrayList<Double> readGeo(JsonReader reader) { 63 ArrayList<Double> list = new ArrayList<>(); 64 try { 65 reader.beginArray(); 66 while (reader.hasNext()) { 67 // 直接读数据就可以 68 double nextDouble = reader.nextDouble(); 69 list.add(nextDouble); 70 } 71 reader.endArray(); 72 } catch (Exception e) { 73 e.printStackTrace(); 74 } 75 return list; 76 } 77 78 // 解析user对象 79 public static User readUser(JsonReader reader) { 80 User user = new User(); 81 try { 82 reader.beginObject(); 83 while (reader.hasNext()) { 84 String name = reader.nextName(); 85 if ("name".equals(name)) { 86 user.setName(reader.nextString()); 87 } else if ("followers_count".equals(name)) { 88 user.setFollowers_count(reader.nextInt()); 89 } else { 90 reader.skipValue(); 91 } 92 } 93 reader.endObject(); 94 } catch (Exception e) { 95 e.printStackTrace(); 96 } 97 return user; 98 } 99 }