zoukankan      html  css  js  c++  java
  • Android中级之网络数据解析一之Json解析


    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处!


    在网络传输的时候,经常用到的解析方式有xml和json两种,今天我们主要来说下json、解析,以及其要点。

    首先json格式:

    “[”标识json解析开始,"]"标识json解析结束

    "{"标识json的一个数据开始,"}"标识一个数据结束

    key:'value'标识所传送的数据。key可以加引号,也可以不加;但value必须加引号,单引号或双引号都可以

    key/value之间要用","隔开

    其他就没什么了。

    json包通常有gson,org-json等,下载路径:http://www.json.org/

    那我们是以alibaba的fastjson为例来做示范

    下载位置:http://download.csdn.net/detail/liuxian13183/5492645

    解析目标:

    [{view:'水浒传',data:{name:'宋江',age:'37'},data2:{name:"武松",age:"27"},memo:'英雄人物'},{view:'红楼梦',data:{name:'贾宝玉',age:"17"},data2:{name:"林黛玉",age:"14",memo:'情感人物'}}]

    命名文件json.txt,放在assets路径下

    注意:json数据要eclipse编辑,不要在windows环境下用txt编辑,否则会加入空格,造成不必要的影响


    先上效果图


    作法1:先写一bean

    public class HistoryBean {
    	private String view;
    	private Map<String, Object> data;
    	private String memo;
    	/**
    	 * @return the view
    	 */
    	public String getView() {
    		return view;
    	}
    	/**
    	 * @param view the view to set
    	 */
    	public void setView(String view) {
    		this.view = view;
    	}
    	/**
    	 * @return the map
    	 */
    	public Map<String, Object> getData() {
    		return data;
    	}
    	/**
    	 * @param map the map to set
    	 */
    	public void setData(Map<String, Object> data) {
    		this.data = data;
    	}
    	/**
    	 * @return the memo
    	 */
    	public String getMemo() {
    		return memo;
    	}
    	/**
    	 * @param memo the memo to set
    	 */
    	public void setMemo(String memo) {
    		this.memo = memo;
    	}
    	/* (non-Javadoc)
    	 * @see java.lang.Object#toString()
    	 */
    	@Override
    	public String toString() {
    		return "HistoryBean [view=" + view + ", data=" +data+ ", memo=" + memo
    				+ "]";
    	}

    注意:无论是变量还是方法名,都禁止出现关键字。

    然后解析

    @Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		ListView main_listivew = (ListView) findViewById(R.id.main_listivew);
    		data = new ArrayList<String>();
    		List<String> targetJsons = unParseTxt("json.txt");
    		for (String targetJson : targetJsons) {
    			pase2(targetJson);
    		}
    		adapter = new MyAdapter();
    		main_listivew.setAdapter(adapter);
    	}
    
    	private List<String> unParseTxt(String string) {
    		// TODO Auto-generated method stub
    		List<String> target = new ArrayList<String>();
    		try {
    			BufferedReader br = new BufferedReader(new InputStreamReader(
    					getAssets().open(string)));
    			String str;
    			while ((str = br.readLine()) != null) {
    				if (!TextUtils.isEmpty(str)) {
    					target.add(str);
    				}
    			}
    		} catch (Exception e) {
    		}
    		return target;
    	}
    
    	private void pase2(String targetJson) {
    		// TODO Auto-generated method stub
    		Log.i("AlipayTag", targetJson);
    		List<HistoryBean> list = JSON.parseArray(targetJson, HistoryBean.class);
    		for (HistoryBean bean : list) {
    			data.add(bean.toString());
    		}
    	}
    

    注解:

    Json解析可使用JSON,JSONObject,JSONArray来调用

    方法有:

    解析成一对象,可以是bean,JSON.parse(text);
    解析成byte数组,JSON.toJSONBytes(arg0, arg1)
    解析成泛型,JSON.parseObject(input, clazz, features)


    根据需要,大家可以更进行相应的扩展,欢迎大家踊跃交流!





  • 相关阅读:
    django 定时任务 django-crontab 的使用
    Django中更新多个对象数据与删除对象的方法
    Django复制记录的方法
    Python中关于日期的计算总结
    django中添加日志功能
    Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
    根据后端传的时间前端js进行倒计时
    输入pip命令报错:from pip import main ImportError: cannot import name 'main'
    操作uwsgi命令
    关于linux下安装mysqlclient报 Failed building wheel for mysqlclient问题
  • 原文地址:https://www.cnblogs.com/fengju/p/6174459.html
Copyright © 2011-2022 走看看