天天看点

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)

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