您的位置:首页 > Web前端 > JavaScript

gson递归解析json数据

2015-02-24 22:10 99 查看
直接用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 block
			e.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;
	}

	@Override
	public 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;
	}

	@Override
	public String toString() {
		return "{\"name\":\"" + username + "\",\"followers_count\":"
				+ followers_count + "}";
	}
    
    
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: