gson递归解析json数据

来源:互联网 发布:pdf笔记软件 编辑:程序博客网 时间:2024/04/30 00:17

直接用api文档中的例子来说明:

json数据:

[{"id": 912345678901,"text": "How do I read JSON on Android?","geo": null,"user": {"name": "android_newb","followers_count": 41}},{"id": 912345678902,"text": "@android_newb just use android.util.JsonReader!","geo": [50.454722,-104.606667],"user": {"name": "jesse","followers_count": 2}}]

格式如下:

[    {        "id": 912345678901,        "text": "How do I read JSON on Android?",        "geo": null,        "user": {            "name": "android_newb",            "followers_count": 41        }    },    {        "id": 912345678902,        "text": "@android_newb just use android.util.JsonReader!",        "geo": [            50.454722,            -104.606667        ],        "user": {            "name": "jesse",            "followers_count": 2        }    }]


解析类如下:

package com.google.demo;import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.StringReader;import java.util.ArrayList;import java.util.List;import com.google.gson.stream.JsonReader;import com.google.gson.stream.JsonToken;public class ParseJson {public static void main(String[] args) {//File file = new File("C:\\Users\\Administrator\\Desktop\\googleDemo.txt");//InputStream in = null;//List list = null;//try {//in = new FileInputStream(file);//list = readJsonStream(in);////System.out.println(list);////System.out.println(list.size());//} catch (IOException e) {//e.printStackTrace();//}String jsonData = readFile("C:\\Users\\Administrator\\Desktop\\googleDemo.txt");System.out.println(jsonData);JsonReader reader = new JsonReader(new StringReader(jsonData));try {List<?> msgList = readMessagesArray(reader);System.out.println(msgList);Message msg1 = (Message) msgList.get(0);System.out.println(msg1);System.out.println(msg1.getId());System.out.println(msg1.getText());System.out.println(msg1.getGeo());System.out.println(msg1.getUser());User user1 = msg1.getUser();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static List<Message> readJsonStream(InputStream in) throws IOException {JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));try {return readMessagesArray(reader);} finally {reader.close();}}public static List<Message> readMessagesArray(JsonReader reader) throws IOException {List<Message> messages = new ArrayList<Message>();reader.beginArray();while (reader.hasNext()) {messages.add(readMessage(reader));}reader.endArray();return messages;}public static Message readMessage(JsonReader reader) throws IOException {long id = -1;String text = null;User user = null;List<Double> geo = null;reader.beginObject();while (reader.hasNext()) {String name = reader.nextName();if (name.equals("id")) {id = reader.nextLong();} else if (name.equals("text")) {text = reader.nextString();} else if (name.equals("geo") && reader.peek() != JsonToken.NULL) {geo = readDoublesArray(reader);} else if (name.equals("user")) {user = readUser(reader);} else {reader.skipValue();}}reader.endObject();return new Message(id, text, user, geo);}public static List<Double> readDoublesArray(JsonReader reader) throws IOException {List<Double> doubles = new ArrayList<Double>();reader.beginArray();while (reader.hasNext()) {doubles.add(reader.nextDouble());}reader.endArray();return doubles;}public static User readUser(JsonReader reader) throws IOException {String username = null;int followers_count = -1;reader.beginObject();while (reader.hasNext()) {String name = reader.nextName();if (name.equals("name")) {username = reader.nextString();} else if (name.equals("followers_count")) {followers_count = reader.nextInt();} else {reader.skipValue();}}reader.endObject();return new User(username, followers_count);}/** * 读取指定文件的内容,将文件中的内容以字符串的形式返回 *  * @param path *            需要读取的文件的路径 * @return 文件的内容 */public static String readFile(String path) {StringBuffer sb = null;BufferedReader br = null;try {br = new BufferedReader(new FileReader(path));sb = new StringBuffer();String line = "";while ((line = br.readLine()) != null) {sb.append(line + "\r\n");}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (br != null) {try {br.close();} catch (Exception e) {e.printStackTrace();}}}String result = sb.toString();return result;}}

Message类:

package com.google.demo;import java.util.List;public class Message {    long id = -1;    String text = null;    User user = null;    List geo = null;        public Message(){        }    public Message(Long id, String text, User user, List geo){this.id = id;this.text = text;this.user = user;this.geo = geo;}public long getId() {return id;}public String getText() {return text;}public User getUser() {return user;}public List getGeo() {return geo;}@Overridepublic String toString() {return "{\"id\":" + id + ",\"text\":\"" + text + "\",\"geo\":" + geo + ",\"user\":" + user + "}";}}

User类:

package com.google.demo;public class User {    String username = null;    int followers_count = 0;    public User(String username, int followersCount) {this.username = username;this.followers_count = followersCount;}public String getUsername() {return username;}public int getFollowers_count() {return followers_count;}@Overridepublic String toString() {return "{\"name\":\"" + username + "\",\"followers_count\":"+ followers_count + "}";}        }



0 0
原创粉丝点击