Android学习之Json数据的获取与解析

Android获取json数据的原理,我的理解是:首先通过http协议获取json数据的字符串格式数据,然后再把字符串格式转变成Json对象的数据

首先我先将某个网址path的数据获取到:

 1 /**
 2  * HttpUtils.java [V 1.0.0]
 3  * classes :com.oysd.json.HttpUtils
 4  * ouyangshengduo create at 2015-6-24
 5  */
 6 package com.oysd.json;
 7
 8 import java.io.ByteArrayOutputStream;
 9 import java.io.IOException;
10 import java.io.InputStream;
11 import java.net.HttpURLConnection;
12 import java.net.MalformedURLException;
13 import java.net.URL;
14
15 /**
16  * com.oysd.json.HttpUtils
17  * @author ouyangshengduo
18  * create at 2015-6-24
19  */
20 public class HttpUtils {
21
22     public HttpUtils() {
23     }
24
25     public static String getJsonContent(String path){
26         try {
27             URL url = new URL(path);
28             HttpURLConnection connection = (HttpURLConnection)url.openConnection();
29             connection.setConnectTimeout(3000);
30             connection.setRequestMethod("GET");
31             connection.setDoInput(true);
32             int code = connection.getResponseCode();
33             if(code == 200){
34                 //获取数据输入流
35                 return changeInputStream(connection.getInputStream());
36             }
37         } catch (MalformedURLException e) {
38             e.printStackTrace();
39         } catch (IOException e) {
40             e.printStackTrace();
41         }
42         return null;
43     }
44
45     /**
46      * 将一个输入流转换成指定编码的字符串
47      * @param inputStream
48      * @return
49      */
50     private static String changeInputStream(InputStream inputStream) {
51         String jsonString = "";
52         ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
53         int len = 0;
54         //把输入流转换成字符串
55         byte[] data = new byte[1024];
56         try {
57             while((len=inputStream.read(data))!=-1){
58                 outputStream.write(data,0,len);
59             }
60             jsonString = new String(outputStream.toByteArray());
61         } catch (IOException e) {
62             e.printStackTrace();
63         }
64         return jsonString;
65     }
66 }

获取到页面的字符串数据之后,就是解析这些数据,这些数据有可能是:一个对象,对象数组,String数组,对象的Map集合。

一下是针对这些基本的数据格式的解析方法:

  1 /**
  2  * JsonTools.java [V 1.0.0]
  3  * classes :com.oysd.json.JsonTools
  4  * ouyangshengduo create at 2015-6-24
  5  */
  6 package com.oysd.json;
  7
  8 import java.util.ArrayList;
  9 import java.util.HashMap;
 10 import java.util.Iterator;
 11 import java.util.List;
 12 import java.util.Map;
 13
 14 import org.json.JSONArray;
 15 import org.json.JSONException;
 16 import org.json.JSONObject;
 17
 18 /**
 19  * com.oysd.json.JsonTools
 20  * @author ouyangshengduo
 21  * create at 2015-6-24
 22  */
 23 public class JsonTools {
 24
 25     public JsonTools() {
 26
 27     }
 28
 29     /**
 30      * 获取对象数据
 31      * @param key
 32      * @param jsonString
 33      * @return
 34      */
 35     public static Person getPerson(String key,String jsonString){
 36         Person person = new Person();
 37         try {
 38             JSONObject jsonObject = new JSONObject(jsonString);
 39             JSONObject personObject = jsonObject.getJSONObject(key);
 40             person.setId(personObject.getInt("id"));
 41             person.setName(personObject.getString("name"));
 42             person.setAddress(personObject.getString("address"));
 43         } catch (JSONException e) {
 44             e.printStackTrace();
 45         }
 46         return person;
 47     }
 48
 49     /**
 50      * 获取对象数组数据
 51      * @param key
 52      * @param jsonString
 53      * @return
 54      */
 55     public static List<Person> getPersons(String key,String jsonString){
 56         List<Person> list = new ArrayList<Person>();
 57         try {
 58             JSONObject jsonObject = new JSONObject(jsonString);
 59             //返回json数组数据
 60             JSONArray jsonArray = jsonObject.getJSONArray(key);
 61             for(int i=0;i<jsonArray.length();i++){
 62                 JSONObject jsonObject2 = jsonArray.getJSONObject(i);
 63                 Person person = new Person();
 64                 person.setId(jsonObject2.getInt("id"));
 65                 person.setName(jsonObject2.getString("name"));
 66                 person.setAddress(jsonObject2.getString("address"));
 67                 list.add(person);
 68             }
 69         } catch (JSONException e) {
 70             e.printStackTrace();
 71         }
 72
 73         return list;
 74     }
 75     /**
 76      * 获取String数组数据
 77      * @param key
 78      * @param jsonString
 79      * @return
 80      */
 81     public static List<String> getList(String key,String jsonString){
 82         List<String> list = new ArrayList<String>();
 83         try {
 84             JSONObject jsonObject = new JSONObject(jsonString);
 85             JSONArray jsonArray = jsonObject.getJSONArray(key);
 86             for(int i=0;i<jsonArray.length();i++){
 87                 String msg = jsonArray.getString(i);
 88                 list.add(msg);
 89             }
 90         } catch (JSONException e) {
 91             e.printStackTrace();
 92         }
 93         return list;
 94     }
 95     /**
 96      * 获取对象的Map集合数据
 97      * @param key
 98      * @param jsonString
 99      * @return
100      */
101     public static List<Map<String,Object>> getListMap(String key,String jsonString){
102         List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
103         try {
104             JSONObject jsonObject = new JSONObject(jsonString);
105             JSONArray jsonArray = jsonObject.getJSONArray(key);
106             for(int i=0;i<jsonArray.length();i++){
107                 JSONObject jsonObject2 = jsonArray.getJSONObject(i);
108                 Map<String,Object> map = new HashMap<String, Object>();
109                 Iterator<String> iterator = jsonObject2.keys();
110                 while(iterator.hasNext()){
111                     String json_key = iterator.next();
112                     Object json_value = jsonObject2.get(json_key);
113                     if(json_value==null){
114                         json_value = "";
115                     }
116                     map.put(json_key, json_value);
117                 }
118                 list.add(map);
119             }
120         } catch (JSONException e) {
121             // TODO Auto-generated catch block
122             e.printStackTrace();
123         }
124
125         return list;
126     }
127
128 }

返回的信息就是我们想要得到的数据了,了解一下这个过程就好了。

时间: 2024-10-03 21:54:34

Android学习之Json数据的获取与解析的相关文章

Android学习之XML数据的三种解析方式以及生成XML文件

首先,我得声明,本博客的思想主要参考了此博客:http://blog.csdn.net/liuhe688/article/details/6415593 不过代码我自己一句句敲的 好了,首先讲一下解析XML的三种方式:(恕我粘贴一下哈) SAX解析器: SAX(Simple API for XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的.当事件源产生事件后,调用事件处理器相应的处理方法,一个事件就可以得到处理.在事件源调用事件处理器中特定方

android中对json数据的解析,并在listview中实际运用

android中对json数据的解析,并在listview中现实,下面是数据{"ziparea": "410100.0", "enddate": "2015-04-03 00:00:00", "ecertarea": "\u9053\u8def\u8d27\u7269\u8fd0\u8f93\u9a7e\u9a76\u5458", "ecertstate": &quo

android开发之JSON数据解析

android开发之JSON数据解析 本博文主要讲述的是使用google的lib库gson解析JSON数据的方法,因为android自带的JSON数据解析器对只可以在android 3.0以上版本才能适用,如果需要使用gson,我们需要在项目中添加gson的lib库文件,然后add path.详细代码如下: MainActivyty.java: package com.example.analysisjson; import android.os.Bundle; import android.a

android下基本json串的生成与解析

以前就用过json串,不过是在java环境下面,如今转移到android环境下,java里面生成解析json串的jar包与android中自带的冲突,所以也只能用安卓自带的. 先前查网上的资料,感觉很多都说的很乱,直接给出了例子,也不解释一下就算完成,他们自己肯定是明白的,但是让读者理解起来肯定有点难度.而且解析的方法很多,而这里,我就介绍一种最原始最简单的吧.希望我拙劣的表达能力不会影响到你们的理解. 首先我们先讲一下json串格式 比如对象pet(宠物) class pet{ int pet

JSON数据的生成与解析

JSON数据的生成与解析,首先先到网上下载一个json jar包,我用的是org.json 示例代码: package json; import org.json.JSONArray; import org.json.JSONObject; public class Main { /** * 生成Json数据 */ public static String createJson(){ JSONObject json = new JSONObject(); json.put("classId&qu

Android 学习笔记之数据存储SharePreferenced+File

学习内容: Android的数据存储.... 1.使用SharedPreferences来保存和读取数据... 2.使用File中的I/O来完成对数据的存储和读取...   一个应用程序,经常需要与用户之间形成交互...需要保存用户的设置和用户的数据信息...这些都离不开数据的存储...Android的数据采用五种方式来进行存储...在这里就先介绍两种存储方式... 1.使用SharedPreferences存储数据...   对于软件配置参数的保存,Windows系统采用ini文件来进行保存,

Android笔记(五十) Android中的JSON数据

JSON是什么: JSON是轻量级的文本数据交换格式 JSON独立于语言和平台 JSON具有自我描述性,更容易理解 JSON语法: 数据在名称/值对中 数据由逗号分割 大括号表示对象 中括号表示数组 JSON使用: MainActivity.java package cn.lixyz.jsontest.activity; import java.io.BufferedReader; import java.io.File; import java.io.FileWriter; import ja

android发送/接收json数据(转)

客户端向服务器端发送数据,这里用到了两种,一种是在url中带参数,一种是json数据发送方式: url带参数的写法: url+/?r=m/calendar/contact_list&uid=3&&subscriptionslist[pageindex]=10&subscriptionslist[recordlimit]=10 从“&”符号之后一连串都是参数. 发送方式代码编写" DefaultHttpClient httpClient = new Defa

Mono for android 访问Webservice和WebApi以及获取和解析JSON

先看效果,注意:(1)这里由于我的模拟器不支持中文输入,所以,对于这张效果图,我是直接在代码中写死了我的查询城市,在下面的代码中我是没有把要查询的城市写死的. (2)读者要想成功使用本示例的所有代码的话(就是一成不改,这也太懒了哈!),需要读者自己申请一个key,然后放入我的代码中,下面的代码注释中我也有说道,请认真观看. (3)改代码本人亲测可行,有图有真相. (4)本文全部原创,热烈欢迎广大网友分享本文,但请标明出处.也欢迎大家和我积极交流相关知识. 布局如大家所见,很简陋,我就不贴代码了哈