Android随手笔记44之JSON数据解析

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式。

  本文将主要介绍在Android开发中,如何在服务器端创建JSON数据,以及如何在Android客户端对JSON数据进行解析。

1.JSON数据结构

  在JSON中有两种数据结构:对象和数组。

1.1对象

  在JSON中,一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号),冒号后是该名称的值,多个“名称:值”之间使用 “,”(逗号)分隔开来。名称需要使用双引号括起来,值如果是字符串则必须用双引号括起来,如果是数值型则不需要。其结构示意图如图1所示。

图1 JSON对象结构示意图

  如下的代码是一个简单的JSON对象示例:

  {   "id":,   "name":"jack",   "age":   }

1.2数组

  在JSON中,数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用 “,”(逗号)分隔开来。其结构示意图如图2所示。

图2 JSON数组结构示意图

  如下的代码是一个简单的JSON数组示例:

  ["北京","上海","广州"]

1.3值的类型

  在JSON的对象和数组结构中,value值不仅可以是数字、字符串等简单数据类型,还可以是对象、数组等,如图3所示。

图3 JSON中值的类型

  因此,我们可以使用对象和数组的组合构成复杂的数据结构。如下的代码使用对象结构定义了一个“students”对象,在“students”对象中包含了一个学生数组,而学生数组中的值又是JSON对象。

{ "students": [ {"name":"jack","age":}, {"name":"rose","age":} ] }

2.在服务器端生成JSON数据

  通常,客户端在请求服务器数据时,服务器可以使用XML文档、JSON数据或HTML的形式将数据发送给客户端。

  那么如何在服务器端生成JSON数据呢?首先需要完成以下两个准备工作。

  (1)我们需要使用MyEclipse创建了一个Web Project,这里我将该工程命名为了“JsonDemoProject”,用来模拟服务器端的Web服务。

  (2)我们还需要在该工程中导入JSON的API数据包json-lib-2.2.2-jdk15.jar。

  在JSON的API中,提供了JSONObject类,通过调用JSONObject类的put(Object key, Object value)方法,可以将一个Object对象以键值对的形式存入JSONObject对象。通过调用JSONObject类的toString()方法,则可以将JSONObject对象转化为JSON数据。

  如下的代码创建了一个JsonTools类,并实现了静态方法createJsonString(),用来生成JSON数据。

 public class JsonTools {    /*    * Function : 生成JSON数据    * Param   :  key Json数据的键值    * object 要生成Json数据的内容    * Retuen  : JSON数据    * Author  : 博客园-依旧淡然    */    public static String createJsonString(String key, Object value) {    JSONObject jsonObject = new JSONObject(); //创建一个JSONObject对象    jsonObject.put(key, value); //往JSONObject对象中填入内容    return jsonObject.toString(); //生成JSON数据并返回    }     }

  通过使用该方法,我们可以很方便的将各种数据传递进来,并将其转化成JSON数据。比如,我们可以在JsonService类中,实现一个简单的获取Person对象列表的方法,具体如下:

/* * Function : 获取Person对象列表 * Author  : 博客园-依旧淡然 */ public List<Person> getListPerson() { List<Person> list = new ArrayList<Person>(); Person person = new Person(, "jack", ); Person person = new Person(, "rose", ); Person person = new Person(, "bob", ); list.add(person); list.add(person); list.add(person); return list; }

  其中,Person对象具有id(int)、name(String)和age(int)三个属性。

  最后,我们可以创建一个继承自HttpServlet的JsonAction类,并实现其中的doPost()方法,用来响应客户端对服务器的请求。具体如下:

 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-"); request.setCharacterEncoding("utf-"); response.setCharacterEncoding("utf-"); PrintWriter out = response.getWriter(); List<Person> listPerson = jsonService.getListPerson(); String str = null; String action_flag = request.getParameter("action_flag"); //获取URL参数 if(action_flag.equals("persons")) { str = JsonTools.createJsonString("persons", listPerson); } out.println(str); out.flush(); out.close(); }

  可以看到,在doPost()方法中,我们通过调用getListPerson()方法获得了Person对象列表listPerson,并将其传入JsonTools.createJsonString()方法中,从而获得了一串JSON数据。

  将该工程发布到Tomcat上,使用浏览器访问该Web工程,可以看到如图4所示的界面,Person对象列表被成功的转化成了JSON数据。

图4 生成的JSON数据

3.在客户端解析JSON数据

  通过上面的步骤,我们已经在服务器上生成了JSON数据。要在我们的Android工程中获取该JSON数据是很容易的,只需要利用Android为我们提供的HttpURLConnection接口访问图4所示的URL即可。

  那么,获取到服务器上的JSON数据以后,如何在Android工程中完成对该JSON数据的解析呢?

  观察图4所示的JSON数据可以看出:

  (1)该JSON数据的最外层是JSONObject,JSONObject的键是“persons”,值是一个JSONArray。

  (2)在JSONArray中又包含了3个JSONObject对象。

  (3)而在内嵌的每一个JSONObject对象中,都有3个键值对的组合。

  分析清楚了JSON数据的构成形式之后,就可以开始着手对其进行解析了。在Android工程中,我们可以创建一个JsonTools类,并实现getListPerson()类方法,用来完成把从服务器获得的Json数据解析出来,还原成Person对象列表。具体

代码如下所示:

/* * Function : 解析JSON数据,还原成Person对象列表 * Param : key Json数据的键值 * jsonString 从服务器获得的Json数据 * Retuen  : Person对象列表 * Author : 博客园-依旧淡然 */ public static List<Person> getListPerson(String key, String jsonString) { List<Person> list = new ArrayList<Person>(); try { JSONObject jsonObject = new JSONObject(jsonString); //创建JSONObject对象 JSONArray personArray = jsonObject.getJSONArray(key); //获取JSONObject对象的值,该值是一个JSON数组 for(int i = ; i < personArray.length(); i++) { JSONObject personObject = personArray.getJSONObject(i); //获得JSON数组中的每一个JSONObject对象 Person person = new Person(); int id = personObject.getInt("id"); //获得每一个JSONObject对象中的键所对应的值 String name = personObject.getString("name"); int age = personObject.getInt("age"); person.setId(id); //将解析出来的属性值存入Person对象 person.setName(name); person.setAge(age); list.add(person); //将解析出来的每一个Person对象添加到List中 } } catch (JSONException e) { e.printStackTrace(); } return list; }

  在本实例中,点击Button按钮向服务器发送获取JSON数据的请求,从服务器获得JSON数据后,可以使用以上的代码完成对JSON数据的解析,最后将解析得到的Person对象依次显示在TextView控件中。程序运行的结果如图5所示。

图5 运行结果

以上内容是小编给大家分享的Android随手笔记44之JSON数据解析的全部叙述,希望大家喜欢。

时间: 2024-11-03 23:02:38

Android随手笔记44之JSON数据解析的相关文章

Android随手笔记44之JSON数据解析_Android

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,为Web应用开发提供了一种理想的数据交换格式. 本文将主要介绍在Android开发中,如何在服务器端创建JSON数据,以及如何在Android客户端对JSON数据进行解析. 1.JSON数据结构 在JSON中有两种数据结构:对象和数组. 1.1对象 在JSON中,一个对象以"{"(左括号)开始,"}"(右括号)结束.每个"名称"

android客户端从服务器端获取json数据并解析的实现代码_Android

首先客户端从服务器端获取json数据 1.利用HttpUrlConnection 复制代码 代码如下: /**      * 从指定的URL中获取数组      * @param urlPath      * @return      * @throws Exception      */     public static String readParse(String urlPath) throws Exception {                  ByteArrayOutputSt

android针对json数据解析方法实例分析_Android

本文实例讲述了android针对json数据解析方法.分享给大家供大家参考.具体如下: JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. – Json.org JSON Vs XML 1.JSON和XML的数据可读性基本相同 2.JSON和XML同样拥有丰富的解析手段 3.

Android 中对JSON数据解析实例代码

Android 中对JSON数据解析 在Android的网络编程中,JSON是比XML使用更为广泛的数据传输机制.在许多的http网络请求或接口调用中,返回的很多都是JSON.所以学会解析JSON是学会Android的基本技能. 简单介绍下JSON,JSON是轻量级的文本数据交换格式,独立于语言和平台.比XML更小,更快,更易解析.JSON是用键值对来保存数据的.JSON保存的值可以是数字.字符串.布尔值.数组和对象. 废话少说,直接上代码.下面对以下JOSN进行解析: { "language&

Android json数据解析详解及实例代码

Android json数据解析详解 移动开发经常要与服务器数据交互,也常使用json数据格式,那就说说Android json解析. 1.最简单json格式解析如下: //解析json ry { JSONTokener jsonParser = new JSONTokener(strResult); JSONObject jsonObj = (JSONObject) jsonParser.nextValue(); String strsportsTitle = jsonObj.getStrin

Json数据解析模拟美团界面显示_Android

<?xml version="." encoding="UTF-"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="dp" android:background=&qu

Android开发中原生生成JSON与解析JSON详解教程

下面分为生成JSON数据和解析JSON数据,所用的包是org.json (1)生成JSON数据方法: 比如要生成一个这样的json文本      {       "phone" : ["12345678", "87654321"],    //数组     "name" : "dream9", // 字符串        "age" : 100, // 数值       "ad

Json数据解析模拟美团界面显示

<?xml version="." encoding="UTF-"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="dp" android:background=&qu

急,急,急,,,,,安卓开发json数据解析,问题描述如下,我该怎么解决

问题描述 急,急,急,,,,,安卓开发json数据解析,问题描述如下,我该怎么解决 我的json数据是这样的: {"产品1":["件","箱"],"产品2":["台"],"产品3":["包"]} 我需要产品1.产品2.产品3放到一个spinner1里,同时当我选择任何一个spinner1的值时,我的另一个spinner2显示对应spinner1的值的spinner2的