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数据,主要涉及以下几个关键知识点: 1. JSON基础知识 JSON是一种轻量级的数据交换格式,其结构基于JavaScript语言的对象表示法,但JSON是独立于语言的。基本语法包括...
下面是一个完整的实例,演示了如何读取JSON数据并显示在TextView上: 1. **创建布局文件**:在`res/layout`目录下,创建一个XML布局文件(如`activity_main.xml`),包含一个TextView用于显示数据: ```xml ...
3. **Android实例分析** 深入学习这些实例,开发者可以掌握如何组织项目结构、创建Activity、处理用户事件、响应生命周期变化、设计自定义视图以及优化性能等方面的知识。例如: - **权限管理**:Android 6.0(API...
在Android开发中,JSON(JavaScript Object Notation)是一种常用的数据交换格式,因其简洁、易读、易编写的特点,被广泛应用于服务器与客户端之间的数据传输。本篇将详细讲解如何在Android应用中解析JSON数据,主要...
"android-json-rpc"正是这样一款专为Android平台设计的JSON-RPC库,它简化了开发者在Android应用程序中执行JSON-RPC服务调用的过程。 该库的核心特性包括: 1. **简单易用的API**:android-json-rpc提供了一个直观...
3. 网络通信:Android应用经常需要与服务器进行数据交换,"网络请求"实例可能涵盖使用HttpURLConnection、OkHttp或Retrofit等库发起HTTP请求,处理JSON或XML响应数据。 4. 多媒体处理:Android支持音频、视频播放和...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Android应用程序开发中,以便于客户端和服务器之间的数据传输。在这个“android使用json小例子”中,我们将探讨如何在Android平台上处理...
Android JSON RPC 0.zip 包含了Android JSON的实例,覆盖了服务端和客户端的实现,这对于理解JSON在Android中的实际应用非常有帮助。 首先,我们来看JSON的基本结构。JSON是一种独立于语言的数据表示方式,主要由...
在Android实例开发中,完全手册通常会涵盖一系列的实践教程,旨在帮助开发者深入理解平台的工作原理,提升开发技能。这个“android实例开发完全手册光盘”包含了一系列的源代码,覆盖了不同的主题和应用场景,这对于...
JSON(JavaScript Object Notation)和Gson是Android开发中常用的数据序列化和反序列化工具,用于在客户端和服务器之间交换数据。本文将详细介绍如何在Android应用中使用JSON和Gson进行数据解析,并通过实际代码示例...
这个"android 动态解析获取json数据的键值对"的项目就是针对这种情况的一个实例,主要展示了如何在Eclipse环境下,不预先创建JSON键值对应的实体类,而是动态地解析JSON并将其内容显示在列表上。 首先,我们要理解...
在Android开发领域,掌握实例源码是提升技能和理解系统工作原理的重要途径。"android 实例源码 集合" 提供了多种Android应用程序的源代码,这为我们提供了宝贵的参考资源,帮助开发者深入理解Android应用开发的各种...
3. **构建视图树**:遍历解析出的JSON树,为每个节点生成对应的`ViewHolder`实例,并将其添加到`RecyclerView`的Adapter中。根据节点的深度,设置其缩进和展开/折叠状态。 4. **实现展开/折叠逻辑**:在`ViewHolder...
3. **转换操作**:使用Gson实例进行JSON和Java对象的相互转换。 4. **异常处理**:处理可能出现的`JsonParseException`、`JsonSyntaxException`等异常。 5. **测试和调试**:使用JUnit或其他测试框架对转换过程...
《Android实例开发完全手册》是一本深度探讨Android应用开发的实战型书籍,旨在通过丰富的实例帮助读者掌握Android开发的核心技术和实践技巧。这本书涵盖了从基础到高级的各个方面,为开发者提供了全面的学习路径。 ...
【Android实例教程】是针对Android开发者的实践指南,旨在通过一系列具体的代码示例来提升编程技能。本教程覆盖了Android应用开发的关键方面,包括UI设计、数据存储、网络通信、多线程、传感器使用等核心知识点。...
在Android开发中,利用Socket发送Json数据是一种常见的网络通信方式,尤其在移动应用与服务器进行实时交互时。本文将深入探讨如何在Android中实现这一功能,包括Json数据格式的使用、Socket通信的基本原理以及实际的...
在Android开发中,数据交换和存储常常涉及到JSON格式,它是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。当需要将Android应用中的数据列表发送到服务器或者从服务器获取数据时,通常需要...
3. **创建`JSONObject`**:将JSON字符串转换为`JSONObject`实例,可以使用`JSONObject`的构造函数: ```java JSONObject jsonObject = new JSONObject(jsonString); ``` 4. **解析键值对**:通过调用`get()`方法...
《精通ANDROID实例开发》这本书是Android开发者进阶的宝贵资源,尤其适合已经掌握了基础的Android编程知识并希望深化理解和实践应用的程序员。本书的核心在于通过丰富的实例,帮助读者深入理解Android平台上的应用...