欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JSON数据解析(5)

程序员文章站 2022-07-12 18:10:44
...

之前我们都是解析XML文件,虽然规范化了文件传输的定义格式,但是大家有没有意识到每次传输前都要进行元素声明,这样传输中将传出很多无用数据,导致传输数据量增大,而且解析xml操作很复杂,作者在之前编程中也几近崩溃,现在我们介绍一种轻量级的数据交换格式--JSON

JSON将对象中数据转化为字符串。在应用程序中传递,最重要的是在异步系统中进行服务器和客户端之间的数据传递,这里将在网络连接课程讲到,利用JSON解析打包发送手机端数据给服务器。

{
 "code":"状态码",
   "message":"返回信息/错误信息",
   "result":{
            "user_id":"用户ID"
   }
}

JSON结构是由外向内读

有点想数据库结构,先从spj读起,再访问子类

一个外部JSONObject保存多个字符串信息例如name,address,telephone和一个JSONArray对象

一个JSONArray对象保存多个JSONObject对象

每一个保存在JSONArray下的JSONObject保存多种数据类型。

现在将数据写入文档

Activity文件

public class MainActivity extends Activity {
	private String nameData[] = new String[] { "张依依", "蓝杰培训", "lanjie" };
	private int ageData[] = new int[] { 30, 5, 7 };
	private boolean isMarraiedData[] = new boolean[] { false, true, false };
	private double salaryData[] = new double[] { 3000.0, 5000.0, 9000.0 };
	private Date birthdayData[] = new Date[] { new Date(), new Date(),
			new Date() };
	private String companyName = "湖南大学(信息科学与工程学院)" ;
	private String companyAddr = "长沙市岳麓区麓山南路453" ;
	private String companyTel = "13283928931" ;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_main);
		JSONObject allData = new JSONObject(); // 建立最外面的节点对象
		JSONArray sing = new JSONArray(); // 定义数组
		for (int x = 0; x < this.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();
			}
			sing.put(temp); // 保存多个JSONObject
		}
		try {
			allData.put("persondata", sing);
			allData.put("company", this.companyName) ; 
			allData.put("address", this.companyAddr) ;
			allData.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 + "eedata" + File.separator + "json.txt"); // 要输出文件的路径
		if (!file.getParentFile().exists()) { // 文件不存在
			file.getParentFile().mkdirs(); // 创建文件夹
		}
		PrintStream out = null;
		try {
			out = new PrintStream(new FileOutputStream(file));
			out.print(allData.toString()); // 将数据变为字符串后保存
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} finally {
			if (out != null) {
				out.close(); // 关闭输出
			}
		}
	}
}

 然后在相应路径找到文件json.txt显示如下:


JSON数据解析(5)
            
    
    博客分类: Android数据存储 安卓JSON解析服务器与客户端传输文件解析写出读入 

接下来我们要试着把json文件解析出来

首先布局文件定义:

<LinearLayout 
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" 
	android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<TextView 
		android:id="@+id/msg"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"/>
</LinearLayout>

 Activity  JSON解析

 

 

public class MainActivity extends Activity {
	private TextView msg = null ;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_main);
		this.msg = (TextView) super.findViewById(R.id.msg) ;
		String str = "[{\"id\":1,\"name\":\"张依依\",\"age\":21},"
				+ "{\"id\":2,\"name\":\"lanjie\",\"age\":10}]";
		StringBuffer buf = new StringBuffer() ;
		try {
			List<Map<String,Object>> all = this.parseJson(str) ;//json解析文本格式
			Iterator<Map<String,Object>> iter = all.iterator() ;
			while(iter.hasNext()){
				Map<String,Object> map = iter.next() ;
				buf.append("ID:" + map.get("id") + ",姓名:" + map.get("name")
						+ ",年龄:" + map.get("age") + "\n");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		this.msg.setText(buf) ;
	}

	private List<Map<String, Object>> parseJson(String data) throws Exception {
		List<Map<String, Object>> all = new ArrayList<Map<String, Object>>();
		JSONArray jsonArr = new JSONArray(data); // 是数组
		for (int x = 0; x < jsonArr.length(); x++) {
			Map<String, Object> map = new HashMap<String, Object>();
			JSONObject jsonObj = jsonArr.getJSONObject(x);
			map.put("id", jsonObj.getInt("id"));
			map.put("name", jsonObj.getString("name"));
			map.put("age", jsonObj.getInt("age"));
			all.add(map);
		}
		return all;
	}
}

 实现效果如图:

 

 

 
JSON数据解析(5)
            
    
    博客分类: Android数据存储 安卓JSON解析服务器与客户端传输文件解析写出读入 
 

  • JSON数据解析(5)
            
    
    博客分类: Android数据存储 安卓JSON解析服务器与客户端传输文件解析写出读入 
  • 大小: 280.7 KB
  • JSON数据解析(5)
            
    
    博客分类: Android数据存储 安卓JSON解析服务器与客户端传输文件解析写出读入 
  • 大小: 19.5 KB