Json数据解析
1 Java代码:
"[{"name":"kevin","age":25},{"name":"cissy","age":24}]";
这是一个json数组。解析的流程:
1. 碰到"[",开始解析Json数组。
2. 碰到"{",开始解析Json对象。
3. 解析Json对象里面的值。
4. 碰到"}",解析Json对象结束。
5. 碰到"]",解析Json数组结束。
另外Gson可以直接解析Json数组或者对象到你自定义的一个对象,这里我就多作解释了。代码里注释写的很清楚。
代码如下:
1 package com.kevin.json; 2 3 import java.io.IOException; 4 import java.io.StringReader; 5 import java.lang.reflect.Type; 6 import java.util.Iterator; 7 import java.util.LinkedList; 8 9 import com.google.gson.Gson; 10 import com.google.gson.reflect.TypeToken; 11 import com.google.gson.stream.JsonReader; 12 13 public class JsonUtils { 14 public void parseJson(String jsonData){ 15 // 解析JSON数据,首先要创建一个JsonReader对象 16 JsonReader reader = new JsonReader(new StringReader(jsonData)); 17 try { 18 // 开始解析JSON数组 19 reader.beginArray(); 20 // 循环读取JSON中的数组 21 while(reader.hasNext()){ 22 // 开始解析JSON数组里的对象 23 reader.beginObject(); 24 // 循环读取JSON数组中的对象 25 while(reader.hasNext()){ 26 String tagName = reader.nextName(); 27 if(tagName.equals("name")){ 28 System.out.println("name---->" + reader.nextString()); 29 } 30 else if(tagName.equals("age")){ 31 System.out.println("age---->" + reader.nextInt()); 32 } 33 } 34 reader.endObject(); 35 } 36 reader.endArray(); 37 } catch (IOException e) { 38 e.printStackTrace(); 39 } 40 } 41 public void parseUserFromJson(String jsonData){ 42 // 解析json对象并赋值给User对象 43 Gson gson = new Gson(); 44 User user = gson.fromJson(jsonData, User.class); 45 System.out.println("name---->" + user.getName()); 46 System.out.println("age---->" + user.getAge()); 47 } 48 // 解析JSON数组并赋值给User对象 49 public void parseUserArrayFromJson(String jsonData){ 50 // 取得该类型的实体 51 Type listType = new TypeToken<LinkedList<User>>(){}.getType(); 52 Gson gson = new Gson(); 53 LinkedList<User> users = gson.fromJson(jsonData, listType); 54 for(Iterator<User> iterator = users.iterator(); iterator.hasNext();){ 55 User user = (User)iterator.next(); 56 System.out.println("name---->" + user.getName()); 57 System.out.println("age---->" + user.getAge()); 58 } 59 } 60 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。