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格式的数据
	

相关文章
|
23天前
|
XML Java Android开发
Android实现自定义进度条(源码+解析)
Android实现自定义进度条(源码+解析)
51 1
|
1月前
|
JSON JavaScript 前端开发
C++ 智能指针与 JSON 处理:高级编程技巧与常见问题解析
C++ 智能指针与 JSON 处理:高级编程技巧与常见问题解析
267 0
|
13天前
|
存储 JSON JavaScript
「Python系列」Python JSON数据解析
在Python中解析JSON数据通常使用`json`模块。`json`模块提供了将JSON格式的数据转换为Python对象(如列表、字典等)以及将Python对象转换为JSON格式的数据的方法。
29 0
|
1月前
|
JSON JavaScript 数据格式
【深入探究C++ JSON库】解析JSON元素的层级管理与遍历手段
【深入探究C++ JSON库】解析JSON元素的层级管理与遍历手段
91 2
|
1月前
|
XML JSON API
深入解析C++ JSON库:nlohmann::json:: parse的内部机制与应用
深入解析C++ JSON库:nlohmann::json:: parse的内部机制与应用
52 0
|
1月前
|
JSON 数据格式
人脸检测解析json的工具类face_test
人脸检测解析json的工具类face_test
14 0
|
11月前
|
JSON Android开发 数据格式
Android:解析Json异常 Expected a string but was BEGIN_OBJECT at
今天解析后端数据时,发现了这个报错:Expected BEGIN_OBJECT but was STRING at 看来是自己哪儿解析错误了。 因为数据的特殊性,后端返回的Json串里面可能还会有Json数据,可能嵌套了三次层,
|
XML 存储 JSON
Android网络与数据存储——网络编程数据处理(网络请求解析Json,解析xml)
Android网络与数据存储——网络编程数据处理(网络请求解析Json,解析xml)
228 0

推荐镜像

更多