`
1140566087
  • 浏览: 560057 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
博客专栏
2c4ae07c-10c2-3bb0-a106-d91fe0a10f37
c/c++ 入门笔记
浏览量:18561
3161ba8d-c410-3ef9-871c-3e48524c5263
Android 学习笔记
浏览量:314455
Group-logo
J2ME 基础学习课程集
浏览量:18791
A98a97d4-eb03-3faf-af96-c7c28f709feb
Spring 学习过程记录...
浏览量:17592
社区版块
存档分类
最新评论

Android 之 JSON的使用用法

阅读更多
1、 生活中,各大公司会提供公共的API供程序访问数据,通过调用API , 一般返回的数据有两种格式:
xml格式;json格式;

2、JSON:
* 概念:是一种轻量级的数据交换格式;采用的是完全独立于语言的文本格式;

3、json数据格式分类:
* key-values 格式; {name:"mike",age : 18}
* 对象格式; {{name:"mike",age : 18},{name:"mike2",age : 19}}   注意:{} 为对象;
* 数组格式:{name:["","",""],age:38}              注意:[] 表示的是数组;
* 数组中包含对象:{students:[{},{}],age:33}

小贴士:万事万物皆对象;

3、将数据以JSON 的格式实现:案例如下

java代码:
 package com.example.json_parse;

import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EncodingUtils;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.util.Xml.Encoding;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.JsPromptResult;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

	private Button parseJSON,achieveJSON;
	private EditText show;
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		/* 组件对象 */
		parseJSON = (Button) findViewById(R.id.parseJSON);
		achieveJSON = (Button) findViewById(R.id.achieveJSON);
		show = (EditText) findViewById(R.id.show);
		
		/* 设置事件监听器:将数据用JSON格式表示 */
		achieveJSON.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				achieve_JSON();
			}
		});
		
		/* 设置事件监听器:解析JSON */
		parseJSON.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				parse_JSON();
			}
		});
		
		
	}
	
	/* 解析JSON格式文本为字符串 */
	protected void parse_JSON(){
		try{
			/* 首先获取服务器返回的JSON文件信息,保存在一个jsp页面中 */
			String path ="http://192.168.16.16:8080/index1.jsp";
			
			/* 设置访问方式;并通过IP地址访问服务器 */
			HttpGet httpGet = new HttpGet(path);
			
			/* 发送请求 */
			HttpClient httpClient = new DefaultHttpClient();
			HttpResponse httpResponse = httpClient.execute(httpGet);
			
			/* 上述请求发送到服务器后会返回请求码,可以用来判断是否请求成功,200代表成功 */
			if(httpResponse.getStatusLine().getStatusCode()==200){
				Toast.makeText(MainActivity.this, "请求成功!", 1000).show();
				
				HttpEntity httpEntity = httpResponse.getEntity();

				/* 获取数据:工具类EntityUtils , 能将得到的数据转换为字符串 */
				String info = EntityUtils.toString(httpEntity, "UTF-8");
				
				
				/* 对字符串操作:将字符串转换为 JSONObject 对象 */
				JSONObject person = new JSONObject(info);
					
				
				/**********************************************************************/
				/* key==students 的值 */
				JSONObject students_value = (JSONObject) person.get("students");
				/* key==school的值 */
				
				String school_value = EncodingUtils.getString(person.getString("school").getBytes(),"GBK") ;
				
				/**********************************************************************/
				
				/**********************************************************************/
				/* 在key==students 的值中,key==c1 的值 *//* key==c2 的值 */
				JSONObject students_c1_value = students_value.getJSONObject("c1");
				JSONObject students_c2_value = students_value.getJSONObject("c2");
				/**********************************************************************/
				
				/**********************************************************************/
				/* 在key==students ,key==c1 中,并且:key==class / number /detail */
				String c1_class_value = students_c1_value.getString("class");
				String c1_number_value = students_c1_value.getString("number");
				JSONArray detail_value = students_c1_value.getJSONArray("detail");
				
				/* 处理detail数组中的元素 */
				String c1_detail_name_value = "";
				String c1_detail_age_value = "";
				ArrayList<String> c1_detail_list = new ArrayList<String>();
				for(int i=0;i<detail_value.length();i++){
					JSONObject detail_value_item = detail_value.getJSONObject(i);
					c1_detail_name_value = detail_value_item.getString("name");
					c1_detail_age_value = detail_value_item.getString("age");
					c1_detail_list.add(c1_detail_name_value+" "+c1_detail_age_value);
				}
				/**********************************************************************/
				
				
				/**********************************************************************/
				/* key==student ,key==c2中,并且:key=class /number/detail */
				String c2_class_value = students_c2_value.getString("class");
				String c2_number_value = students_c2_value.getString("number");
				JSONArray c2_detail_value = students_c2_value.getJSONArray("detail");
				
				/* 处理detail数组中的元素 */
				
				ArrayList<String> c2_detail_list = new ArrayList<String>();
				for(int i=0;i<detail_value.length();i++){
					JSONObject detail_value_item = detail_value.getJSONObject(i);
					String c2_detail_name_value = detail_value_item.getString("name");
					String c2_detail_age_value = detail_value_item.getString("age");
					c2_detail_list.add(c2_detail_name_value+" "+c2_detail_age_value);
				}
				/**********************************************************************/
				
				/* 输出信息 */
				for(int i=0;i<c1_detail_list.size();i++){
					Toast.makeText(MainActivity.this, c1_class_value+"\n"+c1_number_value+"\n"+c1_detail_list.get(i)+"\n"+school_value, 
							1000).show();
				}
				for(int i=0;i<c2_detail_list.size();i++){
					Toast.makeText(MainActivity.this, c2_class_value+"\n"+c2_number_value+"\n"+c2_detail_list.get(i)+"\n"+school_value, 
							1000).show();
				}
				
			}else{
				Toast.makeText(MainActivity.this, "服务器访问失败!", 1000).show();
			}
			
		}catch(Exception ex){
			ex.printStackTrace();
			Toast.makeText(MainActivity.this, "出现异常了!", 1000).show();
		}
		
	}

	/* 将数据以JSON 的格式表示  */
	protected void achieve_JSON(){
//		{
//		students:
//			{
//				c1:{class:"android1",number:37,detail:[{name:"aa",age:18},{name:"ff",age:19}]},
//				c2:{class:"android2",number:38,detail:[{name:"hh",age:16}{name:"kk",age:19}]},
//				
//			},
//		school:"国土地信学院"
//		}
		try{
			
			/* 对上述的格式表示:从最小的级别进行推导 *//* 按如下导论进行格式转换设置 */
			
			/* detail:[{name:"aa",age:18},{name:"ff",age:19}] */
			JSONArray detail_jsonArr = new JSONArray();
			/* 数组中的元素1 */
			JSONObject detail_json_arr_item = new JSONObject();
			detail_json_arr_item.put("name", "aa");
			detail_json_arr_item.put("age", 18);
			/* 数组中的元素2 */
			JSONObject detail_json_arr_item2 = new JSONObject();
			detail_json_arr_item2.put("name", "ff");
			detail_json_arr_item2.put("age", 19);
			detail_jsonArr.put(detail_json_arr_item);
			detail_jsonArr.put(detail_json_arr_item2);
			
			
			/* c1:{class:"android1",number:37,detail:[{name:"aa",age:18},{name:"ff",age:19}]} */
			JSONObject c1_jsonObject = new JSONObject();
			c1_jsonObject.put("class", "android1");
			c1_jsonObject.put("number", 37);
			c1_jsonObject.put("detail", detail_jsonArr);
			
			
			
			/* detail:[{name:"hh",age:16},{name:"kk",age:19}] */
			JSONArray c2_detail_jsonArr = new JSONArray();
			/* 数组中的元素1 */
			JSONObject c2_detail_json_arr_item = new JSONObject();
			c2_detail_json_arr_item.put("name", "bb");
			c2_detail_json_arr_item.put("age", 38);
			/* 数组中的元素2 */
			JSONObject c2_detail_json_arr_item2 = new JSONObject();
			c2_detail_json_arr_item2.put("name", "cc");
			c2_detail_json_arr_item2.put("age", 49);
			
			/* 将元素添加到数组 */
			c2_detail_jsonArr.put(c2_detail_json_arr_item);
			c2_detail_jsonArr.put(c2_detail_json_arr_item2);
			
			
			
			/* c2:{class:"android2",number:38,detail:[{name:"hh",age:16},{name:"kk",age:19}]} */
			JSONObject c2_jsonObject = new JSONObject();
			c2_jsonObject.put("class", "android2");
			c2_jsonObject.put("number", 38);
			c2_jsonObject.put("detail", c2_detail_jsonArr);
			
			
			/* students:{
		c1:{class:"android1",number:37,detail:[{name:"aa",age:18},{name:"ff",age:19}]},
		c2:{class:"android2",number:38,detail:[{name:"hh",age:16},{name:"kk",age:19}]}} */
			JSONObject students_json = new  JSONObject();
			students_json.put("c1", c1_jsonObject);
			students_json.put("c2", c2_jsonObject);
			
			/* 所有 */
			JSONObject person = new JSONObject();
			person.put("students", students_json);
			person.put("school","湖北国土资源职业学院");
			show.setText(person.toString());
		}catch(Exception ex){
			
		}
		
		
	}


}
分享到:
评论

相关推荐

    android-json-rpc

    在实际使用中,开发者首先需要在项目中引入android-json-rpc库,可以通过Gradle或Maven依赖管理工具进行添加。然后,初始化`JsonRpcClient`,设置服务器URL和其他配置。接着,创建请求对象,指定方法名和参数,通过`...

    android之JSON数据的构建

    在Android中,我们通常使用org.json库来处理JSON。该库提供了两个主要类:JSONObject用于表示JSON对象,JSONArray用于表示JSON数组。以下是如何使用这两个类构建JSON数据的例子: 1. 构建JSON对象: ```java import...

    android-json-0.0.20131108.vaadin1-API文档-中文版.zip

    赠送jar包:android-json-0.0.20131108.vaadin1....使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    android之json和gson数据解析最完整的代码例子(包括各种样式的json数据)

    JSON(JavaScript Object Notation)和Gson是Android开发中常用的数据序列化和反序列化工具,...以上就是关于“Android之json和gson数据解析最完整的代码例子”的详细介绍,希望对您在学习和使用JSON及Gson时有所帮助。

    android中json的用法

    该文档完整的讲述了android中json的用法,包括json数据的存储和读取,还有解析json数据等。

    JS调用Android方法,向Android方法传递json数据

    本文将深入探讨如何使用JavaScript调用Android的方法,并传递JSON数据,以实现两者之间的高效通信。 首先,我们需要了解`Android WebView`。WebView是Android系统提供的一种组件,它能够加载并显示网页内容,就像是...

    android_json所需jar包

    本话题主要围绕在Android环境下如何使用JSON,以及"android_json所需jar包"的含义和用途。 首先,"android_json所需jar包"通常指的是用于在Android应用中处理JSON数据的库文件,比如org.json库。这个库提供了解析...

    Android HttpUrlConnection json使用方法

    在Android开发中,HttpUrlConnection是用于网络通信的一种基础组件,尤其在处理JSON数据时,它扮演了重要的角色。本文将详细介绍如何使用HttpUrlConnection进行HTTP的POST和GET请求,并处理JSON响应。 首先,理解...

    android-json-0.0.20131108.vaadin1-API文档-中英对照版.zip

    赠送jar包:android-json-0.0.20131108.vaadin1.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心

    Android读取本地json文件的方法(解决显示乱码问题)

    在Android中,我们通常使用`AssetManager`来访问应用的资源文件,包括JSON文件。下面的代码展示了如何读取JSON文件,但可能会导致乱码: ```java public static String readLocalJson(Context context, String ...

    android城市json数据 按拼音排列/按省市区排列 附带使用方法

    这篇文档将详细介绍如何使用按拼音排列和按省市区排列的JSON数据来实现这一功能,并提供相应的使用方法。 首先,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器...

    android Json使用

    本教程将深入探讨如何在Android中使用JSON进行数据封装和传输,特别是在Java与C++之间的交互。 ### JSON基础知识 1. **JSON的结构**:JSON基于JavaScript的一个子集,主要由对象(键值对)和数组(有序集合)构成,...

    Android 安卓 json解析

    在线JSON解析涉及到网络请求,Android提供了`HttpURLConnection`或`OkHttp`等方法。这里以`HttpURLConnection`为例: ```java URL url = new URL("http://example.com/data.json"); HttpURLConnection connection =...

    android使用JSON进行网络数据交换

    3. 创建JSON数组:使用`JSONArray`类可以创建JSON数组,如`new JSONArray()`,并使用`put()`方法添加元素。 4. 解析JSON数组:使用`getJSONObject(int index)`或`getString(int index)`等方法遍历和获取数组中的元素...

    【Android】JSON应用

    1. 从字符串解析:Android提供了`org.json`包,可以使用`JSONObject`的`JSONObject(String json)`构造方法将JSON格式的字符串转换为`JSONObject`,同理,可以使用`JSONArray(String json)`来解析JSON数组。...

    Android的JSON示例(ASP+Access2003+IIS)

    Android的JSON示例 一、运行环境: 1.服务器端为ASP+Access2003+IIS 2.移动端为Android2.1(大家可根据需要自行调整API Level) 二、主要功能: 1.移动端通过Button将EditText内容提交Request给服务器端 (示例为记录...

    Android应用源码之Android 解析json_dome.zip

    这个压缩包"Android应用源码之Android 解析json_dome.zip"提供了关于如何在Android应用中解析JSON的示例代码,对于学习Android开发中的网络数据处理非常有帮助。 首先,我们需要了解JSON的基本结构。JSON基于...

    【Android】JSON数据的读写方法

    本篇文章将深入探讨Android环境下JSON数据的读写方法。 一、JSON数据格式 JSON数据格式基于JavaScript语法,但独立于语言,具有以下基本结构: 1. 对象(Object):以花括号 `{}` 包裹,键值对以逗号分隔,键(Key...

    android使用JSON进行网络数据交换(服务端、客户端)的实现.rar

    这个压缩包“android使用JSON进行网络数据交换(服务端、客户端)的实现.rar”很可能是包含了一个完整的示例项目,展示如何在Android客户端与服务器之间通过JSON进行数据交互。下面我们将详细讲解这一过程中的关键知识...

    org.json Android

    5. 数据解码:Android应用接收到响应后,使用`org.json`库的`JSONObject`或`JSONArray`解析JSON响应,提取出所需信息。 6. 显示或处理:将解析出来的数据展示在UI上,或者进行进一步的业务处理。 在实际开发中,...

Global site tag (gtag.js) - Google Analytics