`

Android学习之JSON 解析

阅读更多

JSONActivity.java:

package com.cz.json;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.widget.TextView;

public class JSONActivity extends Activity {
	private String nameData[] = new String[] { "小王", "小李", "小张" };
	private int ageData[] = new int[] { 23, 25, 27 };
	private boolean isMarraiedData[] = new boolean[] { false, true, false };
	private double salaryData[] = new double[] { 7000.0, 5000.0, 3000.0 };
	private Date birthdayData[] = new Date[] { new Date(), new Date(),
			new Date() };
	private String companyName = "微软亚洲研究院";
	private String companyAddr = "中国北京";
	private String companyTel = "010-52354396";

	private TextView msg = null;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		writeByJSON();
		readByJSON();

	}

	private void writeByJSON() {
		JSONObject jsonObject = new JSONObject(); // 建立最外面的节点对象
		JSONArray jsonArray = new JSONArray(); // 定义数组
		for (int x = 0; x < nameData.length; x++) { // 将数组内容配置到相应的节点
			JSONObject temp = new JSONObject(); // 每一个包装的数据都是JSONObject
			try {
				temp.put("name", this.nameData[x]);
				temp.put("age", this.ageData[x]);
				temp.put("married", this.isMarraiedData[x]);
				temp.put("salary", this.salaryData[x]);
				temp.put("birthday", this.birthdayData[x]);
			} catch (JSONException e) {
				e.printStackTrace();
			}
			jsonArray.put(temp); // 保存多个JSONObject
		}
		try {
			jsonObject.put("persondata", jsonArray);
			jsonObject.put("company", this.companyName);
			jsonObject.put("address", this.companyAddr);
			jsonObject.put("telephone", this.companyTel);
		} catch (JSONException e) {
			e.printStackTrace();
		}
		if (!Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED)) { // 不存在不操作
			return; // 返回到程序的被调用处
		}
		File file = new File(Environment.getExternalStorageDirectory()
				+ File.separator + "xdwang" + File.separator + "json.txt"); // 要输出文件的路径
		if (!file.getParentFile().exists()) { // 文件不存在
			file.getParentFile().mkdirs(); // 创建文件夹
		}
		PrintStream out = null;
		try {
			out = new PrintStream(new FileOutputStream(file));
			out.print(jsonObject.toString()); // 将数据变为字符串后保存
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} finally {
			if (out != null) {
				out.close(); // 关闭输出
			}
		}

	}

	private void readByJSON() {

		this.msg = (TextView) super.findViewById(R.id.msg);

		if (!Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED)) { // 不存在不操作
			return; // 返回到程序的被调用处
		}
		File file = new File(Environment.getExternalStorageDirectory()
				+ File.separator + "xdwang" + File.separator + "json.txt"); // 要输出文件的路径
		if (!file.exists()) { // 文件不存在
			return;
		}

		BufferedReader reader = null;
		String str = "";
		try {
			reader = new BufferedReader(new FileReader(file));
			String tempString = null;

			while ((tempString = reader.readLine()) != null) {
				str = str + tempString;
			}
			reader.close();
		} catch (Exception e) {
		} finally {
			if (reader != null) {
				try {
					reader.close();
				} catch (Exception e) {
				}
			}
		}

		StringBuffer buf = new StringBuffer();
		try {
			Map<String, Object> result = this.parseJson(str); // 解析文本
			buf.append("公司名称:" + result.get("company") + "\n");
			buf.append("电话号码:" + result.get("telephone") + "\n");
			buf.append("公司地址:" + result.get("address") + "\n");
			List<Map<String, Object>> all = (List<Map<String, Object>>) result
					.get("persondata");
			Iterator<Map<String, Object>> iter = all.iterator();
			while (iter.hasNext()) {
				Map<String, Object> map = iter.next();
				buf.append("姓名:" + map.get("name") + ",年龄:" + map.get("age")
						+ "\n" + "工资:" + map.get("salary") + ",是否结婚:"
						+ map.get("married") + "\n" + "生日:"
						+ map.get("birthday") + "\n");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		this.msg.setText(buf);
	}

	private Map<String, Object> parseJson(String data) throws Exception {
		Map<String, Object> maps = new HashMap<String, Object>();
		JSONObject jsonObject = new JSONObject(data); // 全部的内容变为一个项
		maps.put("company", jsonObject.getString("company")); // 取出项
		maps.put("telephone", jsonObject.getString("telephone")); // 取出项
		maps.put("address", jsonObject.getString("address")); // 取出项
		JSONArray jsonArray = jsonObject.getJSONArray("persondata"); // 取出数组
		List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
		for (int x = 0; x < jsonArray.length(); x++) {
			Map<String, Object> map = new HashMap<String, Object>();
			JSONObject jsonObj = jsonArray.getJSONObject(x);
			map.put("name", jsonObj.getString("name"));
			map.put("age", jsonObj.getInt("age"));
			map.put("salary", jsonObj.getDouble("salary"));
			map.put("married", jsonObj.getBoolean("married"));
			map.put("birthday", jsonObj.getString("birthday"));
			lists.add(map);
		}
		maps.put("persondata", lists);
		return maps;
	}
}

 

分享到:
评论

相关推荐

    Android_JSON数据解析

    Retrofit是另一种流行的Android网络库,它允许更优雅地处理网络请求和响应,包括JSON解析。添加依赖: ```groovy implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation '...

    Android 安卓 json解析

    本文将深入探讨如何在Android平台上进行JSON解析,无需依赖任何第三方库,只使用Android SDK自带的类。我们将涵盖两种解析方式:本地JSON解析和在线JSON解析。 ### 1. JSON基础知识 JSON是一种文本格式,基于...

    Android XML和JSON解析代码

    3. **org.json库**:Android自带的JSON解析库,支持将JSON字符串转换为`JSONObject`和`JSONArray`,并提供相关的方法进行解析。 4. **Fastjson库**:阿里巴巴的高性能JSON库,适用于大量数据处理。 ### Android...

    Android Studio解析JSON对象

    本主题聚焦于“Android Studio解析JSON对象”,这是一个非常关键且实用的技能,因为JSON作为一种轻量级的数据交换格式,广泛应用于网络通信和数据存储。JSON对象可以方便地表示各种复杂的数据结构,包括数组、键值...

    android JSON解析放入ListView

    在Android开发中,JSON(JavaScript Object Notation)是一种轻量级的...综上,Android中将JSON解析并放入ListView涉及到网络请求、JSON解析、数据绑定等多个环节,通过合理的设计和优化,可以构建出高效、流畅的应用。

    android 动态解析获取json数据的键值对

    在Android开发中,有时我们需要从服务器获取JSON数据并解析它以展示在应用中。这个"android 动态解析获取json数据的键值对"的项目就是针对这种情况的一个实例,主要展示了如何在Eclipse环境下,不预先创建JSON键值...

    Android HttpClient与Json解析

    总结来说,这个Demo涵盖了Android中获取网络数据的关键技术:使用HttpClient发起HTTP请求,通过JSON解析获取数据,以及使用AsyncTask实现异步加载以避免阻塞主线程。这些技能对于任何需要与服务器交互的Android应用...

    android封装json解析

    android封装的json解析,可以直接解析对象或者list 如果有不明白的地方,可以联系我: QQ:840950105 Email:vipa1888@163.com Author:spring sky

    android JSON解析数据 android解析天气预报

    笔者近期做到对天气预报JSON数据解析,在此小记。 天气预报接口:http://wthrcdn.etouch.cn/weather_mini?citykey=101200101 JSON数据如下: { desc: OK, status: 1000, data: { wendu: 14, ganmao: 天气...

    Android Json 解析demo

    在“Android Json 解析demo”项目中,可能包含了创建JSON解析器的代码示例,以及如何在Android Studio中运行和测试这些功能的步骤。你可以通过查看项目中的JsonDemo文件来学习具体的实现细节,包括如何读取网络上的...

    Android中Json数据解析

    在Android开发中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它使得人和机器都能容易地读取和编写数据。...通过不断实践,你可以更加灵活地运用这些工具,解决各种复杂的JSON解析问题。

    Android 的 JSON解析源码

    理解并能熟练运用JSON解析对于一个Android开发者来说至关重要。本篇文章将深入探讨Android平台上的JSON解析源码,帮助你更好地理解和优化你的应用性能。 一、JSON基本结构 JSON主要包含两种数据结构:对象和数组。...

    android中的json解析

    在Android开发中,JSON(JavaScript Object Notation)是一种常见的数据交换格式,用于在客户端和...在实际开发中,可以使用Gson库或其他现代库如Retrofit+Moshi,它们提供了更简洁、安全且性能高效的JSON解析方式。

    Android(全JSON解析含第三方jar包)

    在Android中,JSON解析主要包括两个方向:解析JSON字符串为Java对象(反序列化)和将Java对象转换为JSON字符串(序列化)。 **原生JSON解析** Android SDK自API Level 9起提供了org.json库,包含JSONObject和...

    Android Studio解析JSON数组

    这个过程对于任何初学者来说都是一个重要的学习点,因为它涉及到网络数据获取、JSON解析以及UI展示。 首先,我们需要了解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也...

    android之json解析

    本文将深入探讨Android中的三种JSON解析方法:Gson库、org.json库以及Jackson库。 首先,Gson库是由Google提供的一个Java库,它能将Java对象转换为JSON字符串,反之亦然。在Android中,使用Gson进行JSON解析非常...

    android json解析(包含服务器端,客户端)

    总结,理解并熟练掌握JSON解析是Android开发者必备的技能之一,无论是在客户端解析服务器返回的数据,还是在服务器端处理客户端的请求,JSON都起着至关重要的作用。通过选择合适的库和遵循最佳实践,可以使你的JSON...

    Android解析json速度对比

    本篇文章将深入探讨在Android环境下,不同的JSON解析库在解析速度上的表现。 首先,我们关注的三个主要库是: 1. **Fastjson**:阿里巴巴开发的Java JSON库,以其高效性能和易用性而知名。Fastjson支持直接将JSON...

    Android Json解析

    本篇文章将深入探讨Android平台上的JSON解析,包括基本概念、解析方法以及实际应用。 一、JSON基础知识 JSON是一种基于文本的格式,其数据结构主要由键值对(对象)和数组组成。对象以大括号{}包围,键值对以冒号:...

    android采用json解析数据的实例

    综上所述,"android采用json解析数据的实例"涵盖了从网络请求JSON数据、解析JSON、到将数据绑定到UI的全过程。学习这个实例有助于开发者深入理解Android中如何有效地处理网络数据,提高应用的用户体验。在实际开发中...

Global site tag (gtag.js) - Google Analytics