`

[Android实例] android json

 
阅读更多
import java.io.ByteArrayOutputStream; 
import java.io.InputStream; 
import java.net.*; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import org.json.JSONArray; 
import org.json.JSONObject; 
import android.util.Log; 
 
 
public class JSON { 
 
 
/** 
* 获取"数组形式"的JSON数据, 
* 数据形式:[{"id":1,"name":"小猪"},{"id":2,"name":"小猫"}] 
* @param path 网页路径 
* @return 返回List 
* @throws Exception 
*/
public static List<Map<String, String>> getJSONArray(String path) throws Exception { 
String json = null; 
List<Map<String, String>> list = new ArrayList<Map<String, String>>(); 
Map<String, String> map = null; 
URL url = new URL(path); 
HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 利用HttpURLConnection对象,我们可以从网络中获取网页数据. 
conn.setConnectTimeout(5 * 1000); // 单位是毫秒,设置超时时间为5秒 
conn.setRequestMethod("GET"); // HttpURLConnection是通过HTTP协议请求path路径的,所以需要设置请求方式,可以不设置,因为默认为GET 
if (conn.getResponseCode() == 200) {// 判断请求码是否是200码,否则失败 
InputStream is = conn.getInputStream(); // 获取输入流 
byte[] data = readStream(is); // 把输入流转换成字符数组 
json = new String(data); // 把字符数组转换成字符串 
 
 
//数据形式:[{"id":1,"name":"小猪","age":22},{"id":2,"name":"小猫","age":23}] 
JSONArray jsonArray = new JSONArray(json); //数据直接为一个数组形式,所以可以直接 用android提供的框架JSONArray读取JSON数据,转换成Array 
 
 
for (int i = 0; i < jsonArray.length(); i++) { 
JSONObject item = jsonArray.getJSONObject(i); //每条记录又由几个Object对象组成 
int id = item.getInt("id"); // 获取对象对应的值 
String name = item.getString("name"); 
 
 
map = new HashMap<String, String>(); // 存放到MAP里面 
map.put("id", id + ""); 
map.put("name", name); 
list.add(map); 
} 
} 
 
 
// ***********测试数据****************** 
for (Map<String, String> list2 : list) { 
String id = list2.get("id"); 
String name = list2.get("name"); 
Log.i("abc", "id:" + id + " | name:" + name); 
} 
return list; 
} 
 
 
/** 
* 获取"对象形式"的JSON数据, 
* 数据形式:{"total":2,"success":true,"arrayData":[{"id":1,"name":"小猪"},{"id":2,"name":"小猫"}]} 
* @param path 网页路径 
* @return 返回List 
* @throws Exception 
*/
public static List<Map<String, String>> getJSONObject(String path) throws Exception { 
List<Map<String, String>> list = new ArrayList<Map<String, String>>(); 
Map<String, String> map = null; 
URL url = new URL(path); 
HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 利用HttpURLConnection对象,我们可以从网络中获取网页数据. 
conn.setConnectTimeout(5 * 1000); // 单位是毫秒,设置超时时间为5秒 
conn.setRequestMethod("GET"); // HttpURLConnection是通过HTTP协议请求path路径的,所以需要设置请求方式,可以不设置,因为默认为GET 
if (conn.getResponseCode() == 200) {// 判断请求码是否是200码,否则失败 
InputStream is = conn.getInputStream(); // 获取输入流 
byte[] data = readStream(is); // 把输入流转换成字符数组 
String json = new String(data); // 把字符数组转换成字符串 
 
 
 
//数据形式:{"total":2,"success":true,"arrayData":[{"id":1,"name":"小猪"},{"id":2,"name":"小猫"}]} 
JSONObject jsonObject=new JSONObject(json); //返回的数据形式是一个Object类型,所以可以直接转换成一个Object 
int total=jsonObject.getInt("total"); 
Boolean success=jsonObject.getBoolean("success"); 
Log.i("abc", "total:" + total + " | success:" + success); //测试数据 
 
 
JSONArray jsonArray = jsonObject.getJSONArray("arrayData");//里面有一个数组数据,可以用getJSONArray获取数组 
for (int i = 0; i < jsonArray.length(); i++) { 
JSONObject item = jsonArray.getJSONObject(i); // 得到每个对象 
int id = item.getInt("id"); // 获取对象对应的值 
String name = item.getString("name"); 
 
 
map = new HashMap<String, String>(); // 存放到MAP里面 
map.put("id", id + ""); 
map.put("name", name); 
list.add(map); 
} 
} 
 
 
// ***********测试数据****************** 
 
 
for (Map<String, String> list2 : list) { 
String id = list2.get("id"); 
String name = list2.get("name"); 
Log.i("abc", "id:" + id + " | name:" + name); 
} 
return list; 
} 
 
 
 
/** 
* 获取类型复杂的JSON数据 
*数据形式: 
{"name":"小猪", 
"age":23, 
"content":{"questionsTotal":2, 
"questions": [ { "question": "what's your name?", "answer": "小猪"},{"question": "what's your age", "answer": "23"}] 
} 
} 
* @param path 网页路径 
* @return 返回List 
* @throws Exception 
*/
public static List<Map<String, String>> getJSON(String path) throws Exception { 
List<Map<String, String>> list = new ArrayList<Map<String, String>>(); 
Map<String, String> map = null; 
URL url = new URL(path); 
HttpURLConnection conn = (HttpURLConnection) url.openConnection();// 利用HttpURLConnection对象,我们可以从网络中获取网页数据. 
conn.setConnectTimeout(5 * 1000); // 单位是毫秒,设置超时时间为5秒 
conn.setRequestMethod("GET"); // HttpURLConnection是通过HTTP协议请求path路径的,所以需要设置请求方式,可以不设置,因为默认为GET 
if (conn.getResponseCode() == 200) {// 判断请求码是否是200码,否则失败 
InputStream is = conn.getInputStream(); // 获取输入流 
byte[] data = readStream(is); // 把输入流转换成字符数组 
String json = new String(data); // 把字符数组转换成字符串 
 
 
 
/*数据形式: 
{"name":"小猪", 
"age":23, 
"content":{"questionsTotal":2, 
"questions": [ { "question": "what's your name?", "answer": "小猪"},{"question": "what's your age", "answer": "23"}] 
} 
} 
*/ 
JSONObject jsonObject=new JSONObject(json); //返回的数据形式是一个Object类型,所以可以直接转换成一个Object 
String name=jsonObject.getString("name"); 
int age=jsonObject.getInt("age"); 
Log.i("abc", "name:" + name + " | age:" + age); //测试数据 
 
 
JSONObject contentObject=jsonObject.getJSONObject("content"); //获取对象中的对象 
String questionsTotal=contentObject.getString("questionsTotal"); //获取对象中的一个值 
Log.i("abc", "questionsTotal:" + questionsTotal); //测试数据 
 
 
JSONArray contentArray=contentObject.getJSONArray("questions"); //获取对象中的数组 
for (int i = 0; i < contentArray.length(); i++) { 
JSONObject item = contentArray.getJSONObject(i); // 得到每个对象 
String question = item.getString("question"); // 获取对象对应的值 
String answer = item.getString("answer"); 
 
 
map = new HashMap<String, String>(); // 存放到MAP里面 
map.put("question", question); 
map.put("answer", answer); 
list.add(map); 
} 
} 
 
 
// ***********测试数据****************** 
 
 
for (Map<String, String> list2 : list) { 
String question = list2.get("question"); 
String answer = list2.get("answer"); 
Log.i("abc", "question:" + question + " | answer:" + answer); 
} 
return list; 
} 
 
 
/** 
* 把输入流转换成字符数组 
* @param inputStream 输入流 
* @return 字符数组 
* @throws Exception 
*/
public static byte[] readStream(InputStream inputStream) throws Exception { 
ByteArrayOutputStream bout = new ByteArrayOutputStream(); 
byte[] buffer = new byte[1024]; 
int len = 0; 
while ((len = inputStream.read(buffer)) != -1) { 
bout.write(buffer, 0, len); 
} 
bout.close(); 
inputStream.close(); 
 
 
return bout.toByteArray(); 
} 
}

 

分享到:
评论

相关推荐

    android采用json解析数据的实例

    本实例将详细讲解如何在Android应用中解析JSON数据,主要涉及以下几个关键知识点: 1. JSON基础知识 JSON是一种轻量级的数据交换格式,其结构基于JavaScript语言的对象表示法,但JSON是独立于语言的。基本语法包括...

    Android读取JSON实例

    下面是一个完整的实例,演示了如何读取JSON数据并显示在TextView上: 1. **创建布局文件**:在`res/layout`目录下,创建一个XML布局文件(如`activity_main.xml`),包含一个TextView用于显示数据: ```xml ...

    Android Studio实例代码.zip_Android app实例_Android实例_android app源码_and

    3. **Android实例分析** 深入学习这些实例,开发者可以掌握如何组织项目结构、创建Activity、处理用户事件、响应生命周期变化、设计自定义视图以及优化性能等方面的知识。例如: - **权限管理**:Android 6.0(API...

    Android_JSON数据解析

    在Android开发中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,因其简洁、易读、易编写的特点,被广泛应用于服务器与客户端之间的数据传输。本篇将详细讲解如何在Android应用中解析JSON数据,主要...

    android-json-rpc

    "android-json-rpc"正是这样一款专为Android平台设计的JSON-RPC库,它简化了开发者在Android应用程序中执行JSON-RPC服务调用的过程。 该库的核心特性包括: 1. **简单易用的API**:android-json-rpc提供了一个直观...

    Android 实例 源码 39个

    3. 网络通信:Android应用经常需要与服务器进行数据交换,"网络请求"实例可能涵盖使用HttpURLConnection、OkHttp或Retrofit等库发起HTTP请求,处理JSON或XML响应数据。 4. 多媒体处理:Android支持音频、视频播放和...

    android使用json小例子

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Android应用程序开发中,以便于客户端和服务器之间的数据传输。在这个“android使用json小例子”中,我们将探讨如何在Android平台上处理...

    Android_JSON_RPC_0.zip_JSON_android json_android-CS_json android

    Android JSON RPC 0.zip 包含了Android JSON的实例,覆盖了服务端和客户端的实现,这对于理解JSON在Android中的实际应用非常有帮助。 首先,我们来看JSON的基本结构。JSON是一种独立于语言的数据表示方式,主要由...

    android实例开发完全手册光盘

    在Android实例开发中,完全手册通常会涵盖一系列的实践教程,旨在帮助开发者深入理解平台的工作原理,提升开发技能。这个“android实例开发完全手册光盘”包含了一系列的源代码,覆盖了不同的主题和应用场景,这对于...

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

    JSON(JavaScript Object Notation)和Gson是Android开发中常用的数据序列化和反序列化工具,用于在客户端和服务器之间交换数据。本文将详细介绍如何在Android应用中使用JSON和Gson进行数据解析,并通过实际代码示例...

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

    这个"android 动态解析获取json数据的键值对"的项目就是针对这种情况的一个实例,主要展示了如何在Eclipse环境下,不预先创建JSON键值对应的实体类,而是动态地解析JSON并将其内容显示在列表上。 首先,我们要理解...

    android 实例源码 集合

    在Android开发领域,掌握实例源码是提升技能和理解系统工作原理的重要途径。"android 实例源码 集合" 提供了多种Android应用程序的源代码,这为我们提供了宝贵的参考资源,帮助开发者深入理解Android应用开发的各种...

    Android-AndroidJSON格式化显示可配置样式展开与折叠

    3. **构建视图树**:遍历解析出的JSON树,为每个节点生成对应的`ViewHolder`实例,并将其添加到`RecyclerView`的Adapter中。根据节点的深度,设置其缩进和展开/折叠状态。 4. **实现展开/折叠逻辑**:在`ViewHolder...

    android json 解析jar

    3. **转换操作**:使用Gson实例进行JSON和Java对象的相互转换。 4. **异常处理**:处理可能出现的`JsonParseException`、`JsonSyntaxException`等异常。 5. **测试和调试**:使用JUnit或其他测试框架对转换过程...

    android实例开发完全手册

    《Android实例开发完全手册》是一本深度探讨Android应用开发的实战型书籍,旨在通过丰富的实例帮助读者掌握Android开发的核心技术和实践技巧。这本书涵盖了从基础到高级的各个方面,为开发者提供了全面的学习路径。 ...

    android实例教程

    【Android实例教程】是针对Android开发者的实践指南,旨在通过一系列具体的代码示例来提升编程技能。本教程覆盖了Android应用开发的关键方面,包括UI设计、数据存储、网络通信、多线程、传感器使用等核心知识点。...

    android 利用socket 发送Json数据demo

    在Android开发中,利用Socket发送Json数据是一种常见的网络通信方式,尤其在移动应用与服务器进行实时交互时。本文将深入探讨如何在Android中实现这一功能,包括Json数据格式的使用、Socket通信的基本原理以及实际的...

    Android list转json工具类

    在Android开发中,数据交换和存储常常涉及到JSON格式,它是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。当需要将Android应用中的数据列表发送到服务器或者从服务器获取数据时,通常需要...

    Android Studio解析JSON对象

    3. **创建`JSONObject`**:将JSON字符串转换为`JSONObject`实例,可以使用`JSONObject`的构造函数: ```java JSONObject jsonObject = new JSONObject(jsonString); ``` 4. **解析键值对**:通过调用`get()`方法...

    精通ANDROID实例开发-高清.7z

    《精通ANDROID实例开发》这本书是Android开发者进阶的宝贵资源,尤其适合已经掌握了基础的Android编程知识并希望深化理解和实践应用的程序员。本书的核心在于通过丰富的实例,帮助读者深入理解Android平台上的应用...

Global site tag (gtag.js) - Google Analytics