JsonReader解析json文件实例

//要解析的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 }
Message
 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 }
User

接下来就是解析部分的代码了

 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 }

 

posted @ 2019-04-23 14:38  理查  阅读(14239)  评论(0编辑  收藏  举报