gson递归解析json数据
2015-02-24 22:10
99 查看
直接用api文档中的例子来说明:
json数据:
格式如下:
解析类如下:
Message类:
User类:
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 + "}"; } }
相关文章推荐
- flex中使用corelib ActionScript 3 Library sdk包解析json数据
- JSON 数据格式解析
- JavaScript 解析 JSON 数据
- C#json数据解析和xml2json
- JavaScript 解析 JSON 数据
- 使Ext的Template可以解析二层的json数据的方法
- php 无限级数据JSON格式及JS解析
- 如何把Ext.data.store里的数据一次性用JSON传给后台(添加了后台解析部分)
- JSON 体验JSON (三)JSON 数据格式解析(转载)
- 简简单单——无限级数据JSON格式及JS解析
- C# 解析 Json(Jason)数据
- JQuery 解析多维的Json数据格式
- JQuery解析多维的Json数据格式
- [转]flex中使用corelib ActionScript 3 Library sdk包解析json数据
- 前台利用javascript解析Json数据,生成编码折线
- IE6中运行EXTJS中某些组件无法解析DOMINO产生的JSON数据问题的解决办法
- 用jquery解析JSON数据的方法
- jquery解析JSON数据的方法
- 解析JSON格式的数据时,有的字段为空值
- php 无限级数据JSON格式及JS解析