开发者社区> 小弟的谷哥> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Android解析JSON

简介: Android解析json格式的性能比解析XML要高.所以当Android应用请求网络资源时,WEB服务器不返回XML数据,而是json格式的数据.
+关注继续查看
Android解析json格式的性能比解析XML要高.所以当Android应用请求网络资源时,WEB服务器不返回XML数据,而是json格式的数据.
如视频信息Video类的字段为:	
private Integer id;
private String title;
private Integer timelength;

第一部分:Android客户端
(1)Android客户端发送请求
public static List<Video> getJSONVideos() throws Exception{		
		String path="http://192.168.1.120:8080/androidStruts/video.do?format=json";
		URL url=new URL(path);
		HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();
		httpURLConnection.setConnectTimeout(5000);
		httpURLConnection.setRequestMethod("GET");
		InputStream inputStream=httpURLConnection.getInputStream();	
		if(httpURLConnection.getResponseCode()==200){
			return parseJSON(inputStream);//parseJSON(InputStream inputStream)方法见下
		}		
		return null;			
	}

(2)Android客户端解析JSON数据
步骤:
1 将服务器返回的字节数组转换为字符串
2 将字符串数据转换为JSON数组——JSONArray jsonArray=new JSONArray(stringVideosData);
3 遍历JSON数组,取出数组里的每个元素,其类型JSONObject为——JSONObject jsonObject=jsonArray.getJSONObject(i);
4 将每个JSONObject对象的对应值取出来,再填充到对应的JavaBean里面
public static List<Video> parseJSON(InputStream inputStream) throws Exception{		
		List<Video> videos=new ArrayList<Video>();
		byte [] byteVideosData=GetResource.readResource(inputStream);//readResource(InputStream inputStream)方法见下
		String  stringVideosData=new String(byteVideosData);		
		JSONArray jsonArray=new JSONArray(stringVideosData);
		for(int i=0;i<jsonArray.length();i++){
			JSONObject jsonObject=jsonArray.getJSONObject(i);
			Video video=new Video(jsonObject.getInt("id"),jsonObject.getString("title"),jsonObject.getInt("timelength"));
			videos.add(video);
		}
		return videos;
	}

public class GetResource {
    public static byte[] readResource(InputStream inputStream) throws Exception{
    	ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
    	byte [] array=new byte[1024];
    	int len=0;
    	while( (len=inputStream.read(array))!=-1){
    		   outputStream.write(array,0,len);
    	}
    	inputStream.close();
    	outputStream.close();    	
    	return outputStream.toByteArray();
    }
}


第二部分:WEB服务器
当Android应用请求网络资源时,WEB服务器发现path中的参数format=json,于是生成JSON数据
StringBuilder sbsbJson=new StringBuilder();
sbJson.append('[');
    for(Video video:videos){
    sbJson.append('{');
    sbJson.append("id:").append(video.getId()).append(',');
    sbJson.append("title:").append(video.getTitle()).append(',');
    sbJson.append("timelength:").append(video.getTimelength());
    sbJson.append('}').append(',');
    }
sbJson.deleteCharAt(sbJson.length()-1);//去掉最后一个多余的逗号
sbJson.append(']');
最终得到:[{id:1,title:犀利哥视频,timelength:45},{id:2,title:福原爱视频,timelength:55},{id:3,title:陈绮贞视频,timelength:65}]
Android客户端读到的就是这些JSON格式的数据
	

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
1.Android中解析json程序代码
Android程序解析json数据可以通过gson的方式,这种情况需要导入相应的jar包。测试代码如下: @Override    protected void onCreate(Bundle savedInstanceState) {       super.onCreate(savedInstanceState);   
756 0
【Android 应用开发】Activity生命周期 与 Activity 之间的通信
【Android 应用开发】Activity生命周期 与 Activity 之间的通信
28 0
Android应用开发(二):Activity生命周期剖析以及如何启动新的Activity或网页
<p></p> <p>本文讲述组件<span style="font-family:Times New Roman">Activity</span><span style="font-family:宋体">的相关知识,主要包括如何启动一个</span><span style="font-family:Times New Roman">Activity</span><span style=
1245 0
我的Android进阶之旅------&gt;如何将Activity变为半透明的对话框?
              我的Android进阶之旅------>如何将Activity变为半透明的对话框?可以从两个方面来考虑:对话框和半透明。 在定义Activity时指定Theme.Dialog主题就可以将Activity设置为对话框风格。
1295 0
我的Android进阶之旅------&gt;自己写个Activity来调节Android系统背光亮度Brightness
            今天终于算初步写好了一个调节系统背光亮度Brightness的代码,本来不看Android源代码以为可以直接调用某个Action来启动系统的那个调节Brightness的对话框,但是看了代码后发现系统调节Brightness的自定义组件BrightnessPreference继承了SeekBarDialogPreference,但是最终父类还是Preference,因此不能够单独启动,必须得将这个自定义的BrightnessPreference用某个Activity才能加载过来,毕竟最终还是一个组件。
969 0
+关注
小弟的谷哥
welcome
766
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载