gson的使用
Android中有的时候通过第三方API接口获取json格式的数据,那么如何解析json格式的数据呢?
其实我们可以使用gson.jar来帮我们完成这项工作。
比如一个json的格式如下:
{"xingming":"wyl","sex":"male","hobby":"zhihu"},
如果我们用gson来帮我们解析,那么我们就需要编写一个javabean,而这个bean的属性就是json的属性。
具体实例如下:
package wyl;
import java.util.ArrayList;
/**
* 用于gson解析
* @author Administrator
*
*/
public class ReturnMsg {
String code;
String text;
public static ArrayList list;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public static ArrayList getList() {
return list;
}
public static void setList(ArrayList list) {
ReturnMsg.list = list;
}
}
测试类:
package wyl;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import com.google.gson.Gson;
public class gsonTest {
public static void main(String[] args) throws IOException {
String key = "e59219b3f450256c2a3da7157ae651f2";
String info = "上海到成都的火车";//问题
// String info = "我爱你";//问题
info = URLEncoder.encode(info, "UTF-8");
String url = "http://www.tuling123.com/openapi/api?key="+key+"&info="+info;
URL u = new URL(url);
URLConnection conn = u.openConnection();
conn.connect();
InputStream ips = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader( ips, "utf-8"));
StringBuffer sb = new StringBuffer();
String line = "";
while ((line = reader.readLine()) != null) {
sb.append(line);
}
reader.close();
System.out.println("sb:"+sb);
String sb2 = sb.toString();
Gson gson = new Gson();//实例化一个gson对象
//gson.fromJson(paraA,paraB);把json对象转化为java对象,
//paraA是String类型的json字符串,paraB是这个json对应Bean的类类型(java反射中有)
ReturnMsg rtn = gson.fromJson(sb2, ReturnMsg.class);//sb:{"code":305000,"text":"亲,已帮您找到列车信息","list":[{"trainnum":"D636/D637(动车组)","start":"上海虹桥","terminal":"成都东","starttime":"06:09","endtime":"21:15","icon":"http://unidust.cn/images/api-train.jpg","detailurl":"http://touch.qunar.com/h5/train/"},{"trainnum":"D2206/D2207(动车组)","start":"上海虹桥","terminal":"成都东","starttime":"06:39","endtime":"21:47","icon":"http://unidust.cn/images/api-train.jpg","detailurl":"http://touch.qunar.com/h5/train/"},{"trainnum":"K290/K291(快速)","start":"上海","terminal":"成都","starttime":"08:43","endtime":"21:33(+1)","icon":"http://unidust.cn/images/api-train.jpg","detailurl":"http://touch.qunar.com/h5/train/"},{"trainnum":"K1156/K1157(快速)","start":"上海","terminal":"成都","starttime":"09:16","endtime":"16:18(+1)","icon":"http://unidust.cn/images/api-train.jpg","detailurl":"http://touch.qunar.com/h5/train/"},{"trainnum":"K351/K354(快速)","start":"上海南","terminal":"成都","starttime":"17:34","endtime":"04:07(+2)","icon":"http://unidust.cn/images/api-train.jpg","detailurl":"http://touch.qunar.com/h5/train/"},{"trainnum":"K282/K283(快速)","start":"上海","terminal":"成都","starttime":"20:40","endtime":"11:30(+2)","icon":"http://unidust.cn/images/api-train.jpg","detailurl":"http://touch.qunar.com/h5/train/"}]}
System.out.println("code:"+rtn.getCode());//code:305000
System.out.println("text:"+rtn.getText());//text:亲,已帮您找到列车信息
}
}

浙公网安备 33010602011771号